#разработка
На прошлой неделе столкнулся с задачей динамического создания кнопок разных цветов из кастомного drawable.
Задача достаточно простая: нужно было создать кнопку, а дальше сделать
setBackgroundResource() и выбрать необходимый файл. Дальше задать необходимый цвет при помощи метода setColorFilter. Однако, в моем случае, у каждой кнопки была обводка. То есть, в drawable задана
<stroke>, а после применения фильтра она пропадала. Пришлось задаться вопросом и подробнее изучить тему Mode для ColorFilter. ColorFilter используется для нескольких целей. Например, им можно поменять Canvas, если вы создаете с нуля свою View. Или же для изменения цвета и рендеринга ImageView и Drawable, что используется в большинстве случаев.
Также эта возможность позволяет уменьшить количество используемых в приложении иконок. Например, вам нужно использовать одну и ту же иконку, но разных цветов. Теперь можно заменить цвет в иконке при помощи фильтра, а не добавлять в приложение отдельную иконку.
Подробнее о том, как работают фильтры можно найти в этой статье. В моем случае помог Mode
MULTIPLY, который не затронул обводку у кнопки.