Как настроить оттенок для просмотра изображений программно в android?

Необходимо установить оттенок для представления изображения … Я использую его следующим образом:

imageView.setColorFilter(R.color.blue,android.graphics.PorterDuff.Mode.MULTIPLY); 

Но это не меняется …

Вы можете изменить оттенок, довольно легко в коде через:

imageView.setColorFilter(Color.argb(255, 255, 255, 255)); // Белый оттенок

Если вам нужен оттенок цвета, тогда

 imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.MULTIPLY); 

Для векторного рисования

 imageView.setColorFilter(ContextCompat.getColor(context, R.color.COLOR_YOUR_COLOR), android.graphics.PorterDuff.Mode.SRC_IN); 

ОБНОВЛЕНИЕ : @ADev имеет более новое решение в своем ответе, но, похоже, он забыл упомянуть, что его решение требует более новой библиотеки поддержки 25.4.0 или выше.

Большинство ответов относятся к использованию setColorFilter который не является тем, что изначально было задано.

Пользователь @Tad имеет свой ответ в правильном направлении, но он работает только с API 21+.

Чтобы установить оттенок на всех версиях Android, используйте ImageViewCompat :

 ImageViewCompat.setImageTintList(imageView, ColorStateList.valueOf(yourTint)); 

Обратите внимание, что yourTint в этом случае должен быть «color int». Если у вас есть такой цветовой ресурс, как R.color.blue , вам нужно сначала загрузить цвет int:

 ContextCompat.getColor(context, R.color.blue); 

@ Хардик прав. Другая ошибка в вашем коде – это когда вы ссылаетесь на свой цвет, определенный XML. Вы передали только идентификатор методу setColorFilter , когда вы должны использовать идентификатор, чтобы найти ресурс цвета, и передать ресурс методу setColorFilter . Переписывая исходный код ниже.

Если эта строка находится в вашей деятельности:

 imageView.setColorFilter(getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY); 

Кроме того, вам необходимо обратиться к основной деятельности:

 Activity main = ... imageView.setColorFilter(main.getResources().getColor(R.color.blue), android.graphics.PorterDuff.Mode.MULTIPLY); 

Обратите внимание, что это также относится к другим типам ресурсов, таким как целые числа, bools, измерения и т. Д. За исключением строки, для которой вы можете напрямую использовать getString() в своей деятельности, без необходимости сначала вызвать getResources() (don спросите меня, почему).

В противном случае ваш код выглядит хорошо. (Хотя я не исследовал метод setColorFilter слишком много …)

Это сработало для меня

 mImageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.green_500)); 

После того, как я пробовал все методы, и они не работали для меня.

Я получаю решение, используя другой PortDuff.MODE.

 imgEstadoBillete.setColorFilter(context.getResources().getColor(R.color.green),PorterDuff.Mode.SRC_IN); 

Начиная с Lollipop существует также метод оттенков для BitmapDrawables, который работает с новым classом Palette:

public void setTintList (оттенок ColorStateList)

а также

public void setTintMode (PorterDuff.Mode tintMode)

В старых версиях Android теперь вы можете использовать библиотеку DrawableCompat

Попробуй это. Он должен работать на всех версиях Android, поддерживаемых библиотекой поддержки:

 public static Drawable getTintedDrawableOfColorResId(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorRes int colorResId) { return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), ContextCompat.getColor(context, colorResId)); } public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Bitmap inputBitmap, @ColorInt int color) { return getTintedDrawable(context, new BitmapDrawable(context.getResources(), inputBitmap), color); } public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) { Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable); DrawableCompat.setTint(wrapDrawable, color); DrawableCompat.setTintMode(wrapDrawable, PorterDuff.Mode.SRC_IN); return wrapDrawable; } 

Вы можете использовать любой из вышеперечисленных функций, чтобы заставить его работать.

Здесь вы можете прочитать об интересных функциях DrawableCompat в документах.

 Random random=new Random; ImageView imageView = (ImageView) view.findViewById(R.id.imageView); ColorFilter cf = new PorterDuffColorFilter(Color.rgb(random.nextInt(255), random.nextInt(255), random.nextInt(255)),Mode.OVERLAY); imageView.setImageResource(R.drawable.ic_bg_box); imageView.setColorFilter(cf); 

Начиная с Lollipop существует метод, называемый ImageView#setImageTintList() который вы можете использовать … Преимущество состоит в том, что для него требуется ColorStateList а не только один цвет, что делает отображение оттенка изображения ColorStateList .

На устройствах с предустановленным Lollipop вы можете получить такое же поведение, показывая выделение, а затем установите его как графическое изображение ImageView :

 ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_clr_selector); Drawable drawable = DrawableCompat.wrap(imageView.getDrawable()); DrawableCompat.setTintList(drawable, csl); imageView.setImageDrawable(drawable); 

Простая и одна строка

 imageView.setColorFilter(activity.getResources().getColor(R.color.your_color)); 

Я обнаружил, что мы можем использовать селектор цветов для оттенка attr:

 mImageView.setEnabled(true); 

XML:

   

section_arrowup_color.xml:

       

Поскольку первый ответ не сработал для меня:

 //get ImageView ImageView myImageView = (ImageView) findViewById(R.id.iv); //colorid is the id of a color defined in values/colors.xml myImageView.setImageTintList(ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.colorid))); 

Кажется, это работает только в API 21+, но для меня это не проблема. Вы можете использовать ImageViewCompat для решения этой проблемы, т. К.

Надеюсь, я помог кому-нибудь 🙂

Если ваш цвет имеет прозрачность шестнадцатеричного цвета, используйте приведенный ниже код.

 ImageViewCompat.setImageTintMode(img,PorterDuff.Mode.SRC_ATOP); ImageViewCompat.setImageTintList(img,ColorStateList.valueOf(Color.parseColor("#80000000"))); 

Чтобы очистить оттенок

 ImageViewCompat.setImageTintList(img, null); 

Как сказал @milosmns, вы должны использовать imageView.setColorFilter(getResouces().getColor(R.color.blue),android.graphics.PorterDuff.Mode.MULTIPLY);

Для этого API требуется значение цвета вместо идентификатора ресурса цвета. Это основная причина, по которой ваше утверждение не работает.

Дон, t пользовательский режим PowerDuff, используйте setColorFilter, он работает для всех.

  ImageView imageView = (ImageView) listItem.findViewById(R.id.imageView); imageView.setColorFilter(getContext().getResources().getColor(R.color.msg_read)); 

Неточный ответ, но более простая альтернатива:

  • Поместите другой вид поверх изображения
  • Измените альфа- значение представления, но хотите (программно) получить желаемый эффект.

Вот fragment для этого:

     
  • Как протестировать отслеживание направления Android?
  • android viewPager реализация
  • Пользовательский андроид камеры
  • OkHttp Library - NetworkOnMainThreadException при простой записи
  • Способ защиты от лицензирования Lucky Patcher / play
  • Как изменить изображения по умолчанию CheckBox
  • Как иметь ListView / RecyclerView внутри родительского RecyclerView?
  • Как получить текущий контекст активности переднего плана в android?
  • Добавить высоту / тень на панели инструментов для устройств с предварительным леоптипом
  • Разрешение Firebase при чтении данных после аутентификации
  • Программно добавить один вид ниже другого в относительной компоновке
  • Interesting Posts

    Навигация по погружным режимам становится липким после нажатия на тома или минимизации-восстановления

    Использование schema.org branchOf с itemref

    Удалить определенное имя файла в нескольких ZIP-файлах

    Как удалить дополнения Firefox, которые не отображаются в списке аддонов?

    Вставка символа бесконечности в Powerpoint 2010

    Маркировка SMS-сообщений как прочитанных / непрочитанных или удаленных сообщений, не работающих в KitKat

    Это плохая практика, чтобы поймать Throwable?

    Узнайте, откуда был загружен файл

    Можете ли вы удалить структуру папок при копировании файлов в глотку?

    путаница о java Строковый литеральный пул и конкатенация String

    Как можно реализовать новую функцию async в c # 5.0 с помощью call / cc?

    Если вы только издеваетесь над типами, которыми владеете?

    Соберите все «минимальные» решения из предиката

    Где я могу найти окончательный Selenium WebDriver для Матрицы совместимости Firefox?

    Преобразование вектора даты в юлианский день в R

    Давайте будем гением компьютера.