#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.xmlMainActivity.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 задать в разметке...
Комментариев нет:
Отправить комментарий