Страницы

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

среда, 4 марта 2020 г.

Как наложить фильтр на ImageView

#java #android #android_imageview


Я хочу сделать фильтр на чёрно-белое изображение, это мне нужно для разных тем в
приложении. Как я понимаю для этого надо использовать

ImageView header = (ImageView) findViewById(R.id.drawer_header);
header.setColorFilter(R.color.my_color);


Я создал отдельный проект для тестирования и вот что получилось:



Но если я нажимаю на любую кнопку, кроме "убрать фильтр" (он ставит цвет android.R.color.transparent),
получается вот такая фигня:



Почему он делает всё фиолетовым? По логике всё должно работать. Приведу код применения
цвета полностью:

...

// Покрасить в красный
public void setRedColor(View v) {
ImageView header = (ImageView) findViewById(R.id.header);
header.setColorFilter(R.color.red);
}

// Покрасить в синий
public void setBlueColor(View v) {
ImageView header = (ImageView) findViewById(R.id.header);
header.setColorFilter(R.color.blue);
}

// Покрасить в зелёный
public void setGreenColor(View v) {
ImageView header = (ImageView) findViewById(R.id.header);
header.setColorFilter(R.color.green);
}

// Убрать краску
public void setNullColor(View v) {
ImageView header = (ImageView) findViewById(R.id.header);
header.setColorFilter(android.R.color.transparent);
}


Разметка:



    

    


Ответы

Ответ 1



Поменяйте каждый setColorFilter на setColorFilter(this.getResources().getColor(R.color. ... )) но getColor() не рекомендован после API 23, но можно воспользоваться v4 support либо другим getColor() для API>=23

Ответ 2



Разобрался с проблемой, надо было сделать так: header.setColorFilter(this.getResources().getColor(R.color.red), PorterDuff.Mode.ADD);

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

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