Intereting Posts
Java.lang.AssertionError: Неожиданный узел Pythonid; Nodes = [org.jetbrains.plugins.terminal, org.jetbrains.plugins.javaFX Использование python и matplotlib для android Как настроить gradle-2.2.1-all.zip вручную Как узнать, использует ли Locale 12 или 24-часовой формат? Android Studio 2.0 Preview: ': app: transformClassesWithInstantRunForDebug' FAILED FragmentPagerAdapter не восстанавливает фрагменты при изменении ориентации? Render Image как поток данных в браузере Android Неустранимая авария: поиск по фокусу возвратил представление, которое не могло сфокусироваться Соединение с adb было прервано, и попытки повторного подключения не удались Проблема упорядочивания стека событий при запуске приложения из установщика приложений Android и с главного экрана Необходимо отключить расширение на CollapsingToolbarLayout для определенных фрагментов Программный фон для Android События TextWatcher вызываются дважды Android – Как переопределить кнопку «Назад», чтобы она не закончила () мою активность? Разрешение камеры для Android

Применение ColorFilter к ImageView с помощью ShapedDrawable

У меня есть ImageView с android:src установлен в ShapedDrawable , а именно в белый круг. Я хочу раскрасить этот ImageView во время выполнения, реагируя на некоторые события. imgView.setColorFilter похоже, является решением, но после использования этого (попробовал разные параметры) изображение становится невидимым (я не вижу его на экране).

Как это решить? И есть ли лучшие способы иметь цветные круги?

Solutions Collecting From Web of "Применение ColorFilter к ImageView с помощью ShapedDrawable"

Хорошо, я быстро поиграл с этим и заметил, что ваша проблема исчезновения кругов. Если бы вы не описали, что именно вы пытались, я полагаю, вы еще не пробовали установить цветной фильтр на сам Drawable ? (В отличие от ImageView , который, похоже, работает только с BitmapDrawable s).

Следующие утверждения отлично работают для объявленного xml ShapeDrawable с белым цветом в качестве начального цвета:

 ImageView redCircle = (ImageView) findViewById(R.id.circle_red_imageview); ImageView greenCircle = (ImageView) findViewById(R.id.circle_green_imageview); ImageView blueCircle = (ImageView) findViewById(R.id.circle_blue_imageview); // we can create the color values in different ways: redCircle.getDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY ); greenCircle.getDrawable().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY ); blueCircle.getDrawable().setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY ); 

ShapeDrawable для полноты: (я задал размер в ImageView , см. Ниже)

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <solid android:color="@android:color/white" /> </shape> 

И один из ImageView s как пример:

 <ImageView android:id="@+id/circle_red_imageview" android:layout_width="40dp" android:layout_height="40dp" android:padding="5dp" android:src="@drawable/circle_white" /> 

Визуальный результат:

Скриншот цветных кругов

Если вы хотите изменить использование цвета изображения

 PorterDuff.Mode.SRC_ATOP instead PorterDuff.Mode.MULTIPLY 

В приведенном выше примере.

Вы можете использовать атрибут android:tint в ImageView в xml.

Пример:

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/your_drawable" android:tint="@color/your_color" /> 

Протестировано на Android 4.1.2 и 6.0.1

Вы можете сделать это очень просто, используя эту библиотеку: https://github.com/jrvansuita/IconHandler

Он будет работать следующим образом:

 Icon.on(yourImageView).color(R.color.your_color).icon(R.mipmap.your_icon).put();