Android改变形状实例的颜色

时间:2018-02-04 15:15:52

标签: android rippledrawable android-shape android-shapedrawable

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

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

public void OnScanCompleted(string path, Uri uri) { Log.Debug("SO", "Media Scan Finished, Open Gallery Now"); }

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

1 个答案:

答案 0 :(得分:0)

来自Drawable文档:

  

默认情况下,从同一资源加载的所有drawables实例共享一个公共状态;如果修改一个实例的状态,则所有其他实例将收到相同的修改。

所以你的问题就在这里:

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

要避免文档中提到的问题,只需在更改状态之前调用drawable上的mutate()

GradientDrawable gradient =
        (GradientDrawable) bg.findDrawableByLayerId(R.id.ripple_color).mutate();
gradient.setColor(Color.Black);