如何为 RecyclerViews 的 GridLayoutManager 中的每个项目设置不同的颜色
How to set different color for each items in RecyclerViews' GridLayoutManager
我已经实现了 GridLayoutManager,它运行良好。我使用 CardView 作为项目布局。
GridLayoutManager 的屏幕截图:
我只想为列表中的前五个项目设置不同的颜色,并为接下来的五个项目重复相同的颜色。例如,如果我的列表包含 10 个项目,那么前五个项目有不同的颜色假设红色、绿色、蓝色、黄色、粉红色,然后从项目 6 - 10 这些相同的颜色应该设置为背景颜色。我尝试使用 setCardBackgroundColor(Color.parseColor("#FF6363")) 设置 CardView 背景颜色。但这只会更改所有项目的背景颜色。有什么办法可以给物品设置不同的颜色吗?
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.device_card, parent, false);
CardView dc = view.findViewById(R.id.cardViewCard);
dc.setCardBackgroundColor(Color.parseColor("#FF6363"));
return new ViewHolder(view);
}
您必须在 onBindViewHolder 中更改它。
我认为这段代码可能对你有用,只需使用你的位置模数加 1 除以 5 的开关,然后在每种情况下,你都可以将你想要的颜色设置为背景。
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
switch((position+1)%5) {
case 0:
dc.setCardBackgroundColor(Color.parseColor("#Color5"));
break;
case 1:
dc.setCardBackgroundColor(Color.parseColor("#Color1"));
break;
case 2:
dc.setCardBackgroundColor(Color.parseColor("#Color2"));
break;
case 3:
dc.setCardBackgroundColor(Color.parseColor("#Color3"));
break;
case 4:
dc.setCardBackgroundColor(Color.parseColor("#Color4"));
}
}
要使用运行时生成的随机颜色,您可以这样做。
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
Random rand = new Random();
Int red = rand.nextInt(255 - 1)
Int green = rand.nextInt(255 - 1)
Int blue = rand.nextInt(255 - 1)
dc.setCardBackgroundColor(Color.argb(1,red,green,blue));
}
更新
Random rand = new Random(); //declare this in adapter class, instead of creating multiple times do it once
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.device_card, parent, false);
CardView dc = view.findViewById(R.id.cardViewCard);
Int red = rand.nextInt(255 - 1)
Int green = rand.nextInt(255 - 1)
Int blue = rand.nextInt(255 - 1)
dc.setCardBackgroundColor(Color.argb(1,red,green,blue));
return new ViewHolder(view);
}
这将为视图设置随机颜色,并且当您滚动内容时 颜色不会改变,因为 onCreateViewHolder
为每个视图调用一次,而 onBindViewHolder
在内容滚动时调用多次。
我已经实现了 GridLayoutManager,它运行良好。我使用 CardView 作为项目布局。
GridLayoutManager 的屏幕截图:
我只想为列表中的前五个项目设置不同的颜色,并为接下来的五个项目重复相同的颜色。例如,如果我的列表包含 10 个项目,那么前五个项目有不同的颜色假设红色、绿色、蓝色、黄色、粉红色,然后从项目 6 - 10 这些相同的颜色应该设置为背景颜色。我尝试使用 setCardBackgroundColor(Color.parseColor("#FF6363")) 设置 CardView 背景颜色。但这只会更改所有项目的背景颜色。有什么办法可以给物品设置不同的颜色吗?
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.device_card, parent, false);
CardView dc = view.findViewById(R.id.cardViewCard);
dc.setCardBackgroundColor(Color.parseColor("#FF6363"));
return new ViewHolder(view);
}
您必须在 onBindViewHolder 中更改它。
我认为这段代码可能对你有用,只需使用你的位置模数加 1 除以 5 的开关,然后在每种情况下,你都可以将你想要的颜色设置为背景。
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
switch((position+1)%5) {
case 0:
dc.setCardBackgroundColor(Color.parseColor("#Color5"));
break;
case 1:
dc.setCardBackgroundColor(Color.parseColor("#Color1"));
break;
case 2:
dc.setCardBackgroundColor(Color.parseColor("#Color2"));
break;
case 3:
dc.setCardBackgroundColor(Color.parseColor("#Color3"));
break;
case 4:
dc.setCardBackgroundColor(Color.parseColor("#Color4"));
}
}
要使用运行时生成的随机颜色,您可以这样做。
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
Random rand = new Random();
Int red = rand.nextInt(255 - 1)
Int green = rand.nextInt(255 - 1)
Int blue = rand.nextInt(255 - 1)
dc.setCardBackgroundColor(Color.argb(1,red,green,blue));
}
更新
Random rand = new Random(); //declare this in adapter class, instead of creating multiple times do it once
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.device_card, parent, false);
CardView dc = view.findViewById(R.id.cardViewCard);
Int red = rand.nextInt(255 - 1)
Int green = rand.nextInt(255 - 1)
Int blue = rand.nextInt(255 - 1)
dc.setCardBackgroundColor(Color.argb(1,red,green,blue));
return new ViewHolder(view);
}
这将为视图设置随机颜色,并且当您滚动内容时 颜色不会改变,因为 onCreateViewHolder
为每个视图调用一次,而 onBindViewHolder
在内容滚动时调用多次。