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