Добавление цветового фильтра в Drawable изменяет все кнопки с использованием того же Drawable
У меня есть экран, на котором несколько кнопок используют один и тот же фон Drawable. У меня есть многократно используемый код, который я использую в разных проектах, чтобы добавить слушателя OnTouch, который добавляет серый цветной фильтр при нажатии кнопки. Обычно это нормально работает, но в этом случае ВСЕ кнопки окрашиваются, когда нажимается какая-либо из них.
Я вижу объяснение в http://developer.android.com/guide/topics/graphics/2d-graphics.html :
Примечание. Каждый уникальный ресурс в вашем проекте может поддерживать только одно состояние, независимо от того, сколько различных объектов вы можете создать для него. Например, если вы создаете экземпляр двух объектов Drawable из одного и того же ресурса изображения, тогда измените свойство (например, альфа) для одного из Drawables, тогда оно также повлияет на другое.
Предлагаемое решение – использовать TweenAnimation, который, похоже, не работает с цветными фильтрами.
Я также видел Android: Cloning drawable, чтобы сделать StateListDrawable с фильтрами, которые предлагают использовать drawable.getConstantState (). NewDrawable (). Кажется, это не имеет значения. Я предполагаю, что до тех пор, пока используется тот же файл физического изображения, на все Drawables будет влиять изменение на любой другой Drawable с использованием того же ресурса.
Какое решение существует, кроме создания второго фонового изображения для отображения нажатого состояния? Было бы неплохо иметь простое программное решение, которое я могу добавить к своему коду и использовать в каждом проекте.
- Селектор на цвет фона TextView
- Ошибка раздувания classа android.support.design.widget.NavigationView
- Как отключить прокрутку RecyclerView?
- Можно ли объявить переменную в Gradle, используемой в Java?
- Android AutoCompleteTextView с фильтрацией пользовательских адаптеров не работает
- Конструктор пользовательского вида Android
- Очистить задний стек с помощью fragmentов
- Wait Firebase async извлекает данные на Android
Пример, который должен сработать для вас:
Drawable buttonBackground = context.getResources().getDrawable(R.drawable.bg); buttonBackground = buttonBackground.mutate(); //Set your filter here