gpt4 book ai didi

java - 更改回收器 View 的项目 View 内渐变可绘制的颜色

转载 作者:行者123 更新时间:2023-12-02 01:06:01 24 4
gpt4 key购买 nike

我正在构建一个应用程序,该应用程序应该在视觉上直观易用。因此,我在回收器 View 的每个项目中都有一个可绘制的渐变,它应该在每次单击时将其颜色更改为以前的较暗颜色。例如。在特定的渐变绘制上单击 4 次,从白色到粉色到红色到栗色。我是这方面的初学者,可以做到吗?

尝试查看文档没有任何帮助。

这是我的界面代码,其中包含颜色数组。

public interface ColorUtils {

int[][] colorsArray=new int[][]{
new int[]{R.color.red1, R.color.red2, R.color.red3, R.color.red4 },
new int[]{R.color.blue1, R.color.blue2, R.color.blue3, R.color.blue4},
new int[]{R.color.green1, R.color.green2, R.color.green3, R.color.green4},
new int[]{R.color.yellow1, R.color.yellow2, R.color.yellow3, R.color.yellow4},
new int[]{R.color.orange1, R.color.orange2, R.color.orange3, R.color.orange4},
new int[]{R.color.brown1, R.color.brown2, R.color.brown3, R.color.brown4},
new int[]{R.color.grey1, R.color.grey2, R.color.grey3, R.color.grey4}
};

}

这是我尝试在 onBindViewHolder 方法上执行的操作。

 int countOfClicks=0;
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int i) {



final GradientDrawable gd = (GradientDrawable) myViewHolder.image.getDrawable().getCurrent();
final ImageView exclamation = myViewHolder.exclamation;
final ImageView smily = myViewHolder.smily;

gd.setColor(Color.WHITE);
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
countOfClicks++;
switch (countOfClicks) {
case 1:

gd.setColor(ColorUtils.colorsArray[myViewHolder.getAdapterPosition()][countOfClicks]);

break;
case 2:

gd.setColor(ColorUtils.colorsArray[myViewHolder.getAdapterPosition()][countOfClicks]);

break;
case 3:
gd.setColor(ColorUtils.colorsArray[myViewHolder.getAdapterPosition()][countOfClicks]);


break;

default:

gd.setColor(ColorUtils.colorsArray[myViewHolder.getAdapterPosition()][countOfClicks]);
exclamation.setVisibility(View.GONE);
smily.setVisibility(View.VISIBLE);



}
}
});

}

最佳答案

您在适配器中保存一个 HashMap ,或者一个包含颜色值的列表。或者您在 myViewHolder.image 上将值设置为标签,例如:

myViewHolder.image.setTag(ColorUtils.colorsArray[myViewHolder.getAdapterPosition()])

然后在 onClick 中增加点击计数,并执行 notificationDataSetChanged。在 onBindViewHolder 中,您 getTag() 并根据获得的值设置正确的颜色。

为什么它对你不起作用? 1.你没有调用onClick的notifyDataSetChanged。 2. 如果您调用notifyDataSetChanged,它会通过onBindViewHolder 并导致它变成白色gd.setColor(Color.WHITE);

如果你这样做而不是 setColor(Colow.WHITE)基于TAG的颜色,它会起作用。

另一种选择是创建位置和 viewHolder 的 HashMap :

var lstHolders: HashMap<Int, MyViewHolder> = HashMap()

onBindViewHolder 你所做的:

  synchronized(lstHolders) {
lstHolders.put(position, holder)
}

在您的 MyViewHolder 中,您创建一个类似 void changeColor() 的方法然后 onClickListener 根据你的位置获取viewholder并调用changeColor()。这将更改颜色,而不需要调用 notidyDataSetChanged (又名只会修改该 View 而不是所有 View )

关于java - 更改回收器 View 的项目 View 内渐变可绘制的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57728626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com