我有三个具有相同波纹形状的按钮。
当我输入活动时,我改变了单个按钮形状的颜色。
public void OnScanCompleted(string path, Uri uri)
{
Log.Debug("SO", "Media Scan Finished, Open Gallery Now");
}
但是当我重新进入活动时,所有按钮都有这种新颜色。 如何仅更改此形状实例而不是修改形状本身
答案 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);