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