安卓更改形状实例的颜色



我有三个具有相同波纹形状的按钮。

当我进入活动时,我改变了单个按钮形状的颜色。

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);

相关内容

  • 没有找到相关文章

最新更新