Android меняет цвет формы экземпляра

У меня есть три кнопки с одинаковой формой пульсации.

когда я вхожу в активность, я меняю цвет формы отдельных кнопок.

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

но когда я возвращаюсь к активности, все кнопки имеют новый цвет. Как изменить только этот экземпляр формы вместо изменения самой фигуры

1 ответ

Решение

От Drawable документация:

По умолчанию все экземпляры drawables, загруженные из одного и того же ресурса, имеют общее состояние; если вы измените состояние одного экземпляра, все остальные экземпляры получат такую ​​же модификацию.

Итак, ваша проблема здесь:

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);
Другие вопросы по тегам