如何为卡片视图设置随机背景?
How to set random background for cardview?
我目前有一个 Android recyclerview 和一个列表项。在列表项中是我的观点的卡片视图。我想为每张卡片列出随机背景:
我的卡片现在有了坚实的背景,我搜索了每个地方并使用了任何代码,但找不到像示例这样的视图示例。
我的列表项:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/card_view_lead"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardCornerRadius="10dp"
app:cardPreventCornerOverlap="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/style_lead"
android:padding="7dp">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@android:color/transparent"
android:contentDescription="@string/option"
android:src="@drawable/ic_option"
android:tint="@android:color/white" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_margin"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/lead_img"
android:layout_width="40dp"
android:layout_height="40dp"
android:contentDescription="@string/test_pic"
app:riv_border_color="@color/colorPrimary"
app:riv_border_width="0.1dp"
app:riv_corner_radius="100dp"
tools:src="@drawable/pic_1" />
<TextView
android:id="@+id/lead_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="@dimen/standard_margin"
android:layout_toRightOf="@id/lead_img"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="@string/test_name" />
</RelativeLayout>
<TextView
android:id="@+id/lead_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/standard_margin"
android:layout_marginTop="16dp"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="@string/test_city" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/standard_margin">
<TextView
android:id="@+id/lead_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="30$" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/large_margin"
android:layout_marginTop="16dp"
android:layout_toRightOf="@id/lead_price"
android:text="@string/per_hour"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_marginTop="16dp">
<TextView
android:id="@+id/with"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/standard_margin"
android:text="@string/with"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size" />
<TextView
android:id="@+id/lead_vehicle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:layout_toRightOf="@id/with"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="@string/car" />
<ImageView
android:id="@+id/lead_vehicle_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@id/lead_vehicle"
android:contentDescription="@string/car_img"
tools:src="@drawable/ic_car" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
您需要编写一些逻辑来产生随机颜色,然后像这样使用它
CardView card = (CardView)findViewById(R.id.card);
card.setCardBackgroundColor(color);
要生成随机颜色,Stack Overflow 上已有解决方案,请查看 this link。
每次将新项目放入适配器列表时,您都可以生成随机颜色
See this
由于您只提供了 xml 部分,我假设您有一个模型来存储要显示的信息。您可以添加另一个 属性 "color" ,您可以在其中存储每个项目的随机颜色,并在 onBindViewHolder 方法中设置
CardView card = (CardView)findViewById(R.id.card_view_lead);
在你的 onbindview holder 中
Random rnd = new Random();
currentColor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
holder.card.setCardBackgroundColor(currentColor);
通常我们可以这样做,
Colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="blue" type="color">#FF33B5E5</item>
<item name="purple" type="color">#FFAA66CC</item>
<item name="green" type="color">#FF99CC00</item>
<item name="orange" type="color">#FFFFBB33</item>
<item name="red" type="color">#FFFF4444</item>
<item name="darkblue" type="color">#FF0099CC</item>
<item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkgreen" type="color">#FF669900</item>
<item name="darkorange" type="color">#FFFF8800</item>
<item name="darkred" type="color">#FFCC0000</item>
<integer-array name="androidcolors">
<item>@color/blue</item>
<item>@color/purple</item>
<item>@color/green</item>
<item>@color/orange</item>
<item>@color/red</item>
<item>@color/darkblue</item>
<item>@color/darkpurple</item>
<item>@color/darkgreen</item>
<item>@color/darkorange</item>
<item>@color/darkred</item>
</integer-array>
</resources>
并在您的 onCreateView() 中执行此操作,
CardView card_view_lead;
card_view_lead= (CardView) findViewById(R.id.card_view_lead);
int[] androidColors = getResources().getIntArray(R.array.androidcolors);
int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];
card_view_lead.setBackgroundColor(randomAndroidColor);
如果你不想使用颜色数组,那么你可以在你的 onCreateView() 或 onCreate() 中使用这样的方法,
mCardViewTop.setCardBackgroundColor(getRandomColor());
public static int getRandomColor() {
Random rnd = new Random();
return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
}
CardView cardView = (CardView)findViewById(R.id.card_view_lead);
cardView.setCardBackgroundColor(getRandomColorCode());
public int getRandomColorCode(){
Random random = new Random();
return Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256));
}
像这样在 res/values/colour 中创建数组
<array name="note_neutral_colors">
<item>#9E9E9E</item>
<item>#455A64</item>
<item>#607D8B</item>
</array>
<array name="note_accent_colors">
<item>#039BE5</item>
<item>#3D51B3</item>
<item>#689f38</item>
<item>#FD7044</item>
</array>
在您的适配器中 Class
holder.cardView.setCardBackgroundColor(noticeModel.getColor());
型号Class
//Variable
int color;
//Cunstructor
this.color=color;
///and generate Getter Setter
这样做你的主要 Class.java
private static int getRandomColor(Context context) {
int[] colors;
if (Math.random() >= 0.6) {
colors = context.getResources().getIntArray(R.array.note_accent_colors);
} else {
colors = context.getResources().getIntArray(R.array.note_neutral_colors);
}
return colors[((int) (Math.random() * colors.length))];
}
像这样用字符串请求调用此方法
yourModel = new Your_Model(data1,data2,data3,getRandomColor(YourActivity.this));
我目前有一个 Android recyclerview 和一个列表项。在列表项中是我的观点的卡片视图。我想为每张卡片列出随机背景:
我的卡片现在有了坚实的背景,我搜索了每个地方并使用了任何代码,但找不到像示例这样的视图示例。
我的列表项:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/card_view_lead"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardCornerRadius="10dp"
app:cardPreventCornerOverlap="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/style_lead"
android:padding="7dp">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@android:color/transparent"
android:contentDescription="@string/option"
android:src="@drawable/ic_option"
android:tint="@android:color/white" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_margin"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/lead_img"
android:layout_width="40dp"
android:layout_height="40dp"
android:contentDescription="@string/test_pic"
app:riv_border_color="@color/colorPrimary"
app:riv_border_width="0.1dp"
app:riv_corner_radius="100dp"
tools:src="@drawable/pic_1" />
<TextView
android:id="@+id/lead_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="@dimen/standard_margin"
android:layout_toRightOf="@id/lead_img"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="@string/test_name" />
</RelativeLayout>
<TextView
android:id="@+id/lead_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/standard_margin"
android:layout_marginTop="16dp"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="@string/test_city" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/standard_margin">
<TextView
android:id="@+id/lead_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="30$" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/large_margin"
android:layout_marginTop="16dp"
android:layout_toRightOf="@id/lead_price"
android:text="@string/per_hour"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_marginTop="16dp">
<TextView
android:id="@+id/with"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/standard_margin"
android:text="@string/with"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size" />
<TextView
android:id="@+id/lead_vehicle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="6dp"
android:layout_toRightOf="@id/with"
android:textColor="@android:color/white"
android:textSize="@dimen/large_font_size"
tools:text="@string/car" />
<ImageView
android:id="@+id/lead_vehicle_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@id/lead_vehicle"
android:contentDescription="@string/car_img"
tools:src="@drawable/ic_car" />
</RelativeLayout>
</LinearLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
您需要编写一些逻辑来产生随机颜色,然后像这样使用它
CardView card = (CardView)findViewById(R.id.card);
card.setCardBackgroundColor(color);
要生成随机颜色,Stack Overflow 上已有解决方案,请查看 this link。
每次将新项目放入适配器列表时,您都可以生成随机颜色 See this
由于您只提供了 xml 部分,我假设您有一个模型来存储要显示的信息。您可以添加另一个 属性 "color" ,您可以在其中存储每个项目的随机颜色,并在 onBindViewHolder 方法中设置
CardView card = (CardView)findViewById(R.id.card_view_lead);
在你的 onbindview holder 中
Random rnd = new Random();
currentColor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
holder.card.setCardBackgroundColor(currentColor);
通常我们可以这样做, Colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="blue" type="color">#FF33B5E5</item>
<item name="purple" type="color">#FFAA66CC</item>
<item name="green" type="color">#FF99CC00</item>
<item name="orange" type="color">#FFFFBB33</item>
<item name="red" type="color">#FFFF4444</item>
<item name="darkblue" type="color">#FF0099CC</item>
<item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkgreen" type="color">#FF669900</item>
<item name="darkorange" type="color">#FFFF8800</item>
<item name="darkred" type="color">#FFCC0000</item>
<integer-array name="androidcolors">
<item>@color/blue</item>
<item>@color/purple</item>
<item>@color/green</item>
<item>@color/orange</item>
<item>@color/red</item>
<item>@color/darkblue</item>
<item>@color/darkpurple</item>
<item>@color/darkgreen</item>
<item>@color/darkorange</item>
<item>@color/darkred</item>
</integer-array>
</resources>
并在您的 onCreateView() 中执行此操作,
CardView card_view_lead;
card_view_lead= (CardView) findViewById(R.id.card_view_lead);
int[] androidColors = getResources().getIntArray(R.array.androidcolors);
int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];
card_view_lead.setBackgroundColor(randomAndroidColor);
如果你不想使用颜色数组,那么你可以在你的 onCreateView() 或 onCreate() 中使用这样的方法,
mCardViewTop.setCardBackgroundColor(getRandomColor());
public static int getRandomColor() {
Random rnd = new Random();
return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
}
CardView cardView = (CardView)findViewById(R.id.card_view_lead);
cardView.setCardBackgroundColor(getRandomColorCode());
public int getRandomColorCode(){
Random random = new Random();
return Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256));
}
像这样在 res/values/colour 中创建数组
<array name="note_neutral_colors">
<item>#9E9E9E</item>
<item>#455A64</item>
<item>#607D8B</item>
</array>
<array name="note_accent_colors">
<item>#039BE5</item>
<item>#3D51B3</item>
<item>#689f38</item>
<item>#FD7044</item>
</array>
在您的适配器中 Class
holder.cardView.setCardBackgroundColor(noticeModel.getColor());
型号Class
//Variable
int color;
//Cunstructor
this.color=color;
///and generate Getter Setter
这样做你的主要 Class.java
private static int getRandomColor(Context context) {
int[] colors;
if (Math.random() >= 0.6) {
colors = context.getResources().getIntArray(R.array.note_accent_colors);
} else {
colors = context.getResources().getIntArray(R.array.note_neutral_colors);
}
return colors[((int) (Math.random() * colors.length))];
}
像这样用字符串请求调用此方法
yourModel = new Your_Model(data1,data2,data3,getRandomColor(YourActivity.this));