我有三个具有相同波纹形状的按钮。
当我进入活动时,我改变了单个按钮形状的颜色。
RippleDrawable bg = (RippleDrawable) button.getBackground();
GradientDrawable gradient = (GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color);
gradient.setColor(Color.Black);
但是当我重新输入活动时,所有按钮都有这种新颜色。 如何仅更改此形状实例而不是修改形状本身
来自Drawable
文档:
默认情况下,从同一资源加载的所有可绘制对象实例共享一个公共状态;如果修改一个实例的状态,所有其他实例将收到相同的修改。
所以你的问题就在这里:
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);