Страницы

Поиск по вопросам

вторник, 7 апреля 2020 г.

Изменение цвета на png программно

#android #android_drawable

                    
Есть изображение .png, это иконка для таба, для нее я сделал селектор, что бы при
активном и неактивном табе она имела разный цвет. Пробовал PorterDuff.Mode но результат
не совсем такой как я хотел. Меня интересует как можно заменить в селекторе цвет активной
иконки динамически. Что бы вместо фиолетовой иконки можно было сделать, красную, зеленую,
желтую и т.д.

Пример моего селектора:











Пример иконки:



    


Ответы

Ответ 1



Изменить цвет можно так: TintIcons.java public class TintIcons { public static Drawable tintIcon(Drawable icon, ColorStateList colorStateList) { if(icon!=null) { icon = DrawableCompat.wrap(icon).mutate(); DrawableCompat.setTintList(icon, colorStateList); DrawableCompat.setTintMode(icon, PorterDuff.Mode.SRC_IN); } return icon; } public static void tintImageView(ImageView imageView, int colorStateListResId) { ColorStateList list = ContextCompat.getColorStateList(imageView.getContext(), colorStateListResId); if (list != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { imageView.setImageTintList(list); } else { imageView.setImageDrawable(tintIcon(imageView.getDrawable(), list)); } } } } /res/color/icon_state_list.xml MainActivity.java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TintIcons.tintImageView((ImageView) findViewById(R.id.img_view), R.color.icon_state_list); } } Вместо списка состояний можно передавать просто цвет (например, R.color.colorPrimary), тогда картинка просто перекрасится. Аналогично можно перекрасить фон кнопок и т.д. (получив предварительно картинку фона через imageView.getBackground()). Как видно все эти причуды нужны для pre-Lollipop. Для lollipop+ достаточно titnList задать в разметке...

Комментариев нет:

Отправить комментарий