java – 暂时改变可绘制的颜色

前端之家收集整理的这篇文章主要介绍了java – 暂时改变可绘制的颜色前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我开发的一个应用程序中,我正在尝试以编程方式创建一个 ImageButton,它是所选ImageButton的副本,但图像以不同的方式着色,让我们说是红色.

如果我使用PowerDuff.Mode.MULTIPLY:

clonebutton.getDrawable().setColorFilter(0xFFFF0000,Mode.MULTIPLY);

然后,即使原始的ImageButton将其颜色更改为红色,因为它们共享相同的drawable.有没有办法只在克隆按钮上应用过滤器而不使用两个不同的drawable?例如,是否可以在某种程度上将colorize图层放在clonebutton的顶部而不编辑drawable?

更新
我将drawable设置为可变:

Drawable d = swipebutton.getDrawable();
d.mutate();
d.setColorFilter(0xFFFF0000,Mode.MULTIPLY);
swipebutton.setImageDrawable(d);

这可以防止我的clonebutton将其drawable的状态共享给其他视图.

解决方法

Drawable buttonBackground = clonebutton.getDrawable();
buttonBackground = buttonBackground.mutate();
buttonBackground.setColorFilter(0xFFFF0000,Mode.MULTIPLY);

Make this drawable mutable. This operation cannot be reversed. A mutable drawable is guaranteed to not share its state with any other drawable. This is especially useful when you need to modify properties of drawables loaded from resources. By default,all drawables instances loaded from the same resource share a common state; if you modify the state of one instance,all the other instances will receive the same modification. Calling this method on a mutable Drawable will have no effect.

猜你在找的Java相关文章