Android 更改形状实例的颜色
Android change color of shape Instance
我有三个波纹形状相同的按钮。
当我输入 activity 时,我改变了单个按钮形状的颜色。
RippleDrawable bg = (RippleDrawable) button.getBackground();
GradientDrawable gradient = (GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color);
gradient.setColor(Color.Black);
但是当我重新输入 activity 时,所有按钮都有这种新颜色。
如何仅更改此形状实例而不是修改形状本身
来自 Drawable
文档:
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.
那么你的问题就在这里:
GradientDrawable gradient = (GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color);
gradient.setColor(Color.Black);
为避免文档中提到的问题,只需在更改其状态之前对可绘制对象调用 mutate()
。
GradientDrawable gradient =
(GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color).mutate();
gradient.setColor(Color.Black);
我有三个波纹形状相同的按钮。
当我输入 activity 时,我改变了单个按钮形状的颜色。
RippleDrawable bg = (RippleDrawable) button.getBackground();
GradientDrawable gradient = (GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color);
gradient.setColor(Color.Black);
但是当我重新输入 activity 时,所有按钮都有这种新颜色。 如何仅更改此形状实例而不是修改形状本身
来自 Drawable
文档:
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.
那么你的问题就在这里:
GradientDrawable gradient = (GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color); gradient.setColor(Color.Black);
为避免文档中提到的问题,只需在更改其状态之前对可绘制对象调用 mutate()
。
GradientDrawable gradient =
(GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color).mutate();
gradient.setColor(Color.Black);