Android ColorFilter Mode

#разработка 



На прошлой неделе столкнулся с задачей динамического создания кнопок разных цветов из кастомного drawable. 



Задача достаточно простая: нужно было создать кнопку, а дальше сделать setBackgroundResource() и выбрать необходимый файл. Дальше задать необходимый цвет при помощи метода setColorFilter



Однако, в моем случае, у каждой кнопки была обводка. То есть, в drawable задана <stroke>, а после применения фильтра она пропадала. Пришлось задаться вопросом и подробнее изучить тему Mode для ColorFilter. 



ColorFilter используется для нескольких целей. Например, им можно поменять Canvas, если вы создаете с нуля свою View. Или же для изменения цвета и рендеринга ImageView и Drawable, что используется в большинстве случаев.



Также эта возможность позволяет уменьшить количество используемых в приложении иконок. Например, вам нужно использовать одну и ту же иконку, но разных цветов. Теперь можно заменить цвет в иконке при помощи фильтра, а не добавлять в приложение отдельную иконку. 



Подробнее о том, как работают фильтры можно найти в этой статье. В моем случае помог Mode MULTIPLY, который не затронул обводку у кнопки.