0

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

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

RippleDrawable bg = (RippleDrawable) button.getBackground(); GradientDrawable gradient = (GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color); gradient.setColor(Color.Black);

但是当我重新进入活动时,所有按钮都有这种新颜色。如何仅更改此形状实例而不是修改形状本身

4

1 回答 1

0

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);
于 2018-02-04T15:35:42.383 回答