【发布时间】:2017-09-25 09:59:17
【问题描述】:
我正在尝试在 KitKat 上使用随机生成的颜色创建 ListView。
问题:它只为不同的项目显示相同的颜色。
这是我的代码:
Drawable d = getResources().getDrawable(R.drawable.main_item_image_background);
int r = (int) (Math.random() * 256);
int g = (int) (Math.random() * 256);
int b = (int) (Math.random() * 256);
int randColor = Color.argb(255, r, g, b);
d.setColorFilter(new PorterDuffColorFilter(randColor, PorterDuff.Mode.SRC_IN));
viewHolder.ivLogoBackground.setImageDrawable(d);
我也尝试过这样做:
Random rand = new Random();
int r = rand.nextInt(256);
int g = rand.nextInt(256);
int b = rand.nextInt(256);
它在 Lollipop 或更高版本上运行良好,但在 KitKat 上它为每个项目显示相同的颜色。
我认为问题出在d.setColorFilter(new PorterDuffColorFilter(randColor, PorterDuff.Mode.SRC_IN));
安卓手机:
Android KitKat:
解决方案: Drawable 必须有 mutate() 方法。然后列表项中的图像将是不同的颜色:)
【问题讨论】:
-
This answer 应该会有所帮助。
-
@Ajil O 不幸的是没有。我的屏幕截图显示
setColorFilter方法正在运行。但颜色不是随机生成的。 -
你的drawable是什么样子的?
-
@Ajil O 这是 xml 格式的 svg。我发现了问题。最初我的drawable是不可变的,所以我添加了
d.mutate(),现在它就像一个魅力:)
标签: android listview svg colors android-4.4-kitkat