Программно изменить backgroundTint ImageView с Vector Asset для фона

<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/colorRed"
    android:background="@drawable/ic_delete"/>

Как и выше, я добавил Android VectorAsset для фона ImageView.
И я могу изменить цвет этого векторного актива с красного на синий с помощью xml, как показано ниже.

android:backgroundTint="@color/colorBlue"

но я хочу изменить его цвет программно.
Я пробовал разные методы, но ни один из них не работал

3 ответа

Решение

Вместо того, чтобы использовать ImageView ты можешь использовать AppCompatImageView, Так как setBackgroundTintList поддерживается с уровня API 21, если вы используете AppCompatImageView Вы можете изменить цвет оттенка, используя setSupportBackgroundTintList,

так что измените свой ImageView, как это,

<android.support.v7.widget.AppCompatImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@color/colorRed"
    android:background="@drawable/ic_delete"/>

Так что вы можете позвонить setSupportBackgroundTintList чтобы установить оттенок цвета, как это,

imageView.setSupportBackgroundTintList(ContextCompat.getColorStateList(this, R.color.colorBlue));

Программно это можно сделать так:

img.setColorFilter(getResources().getColor(R.color.white));

Прежде всего background и src - это разные свойства для ImageView. Вы пытаетесь установить изображение для ImageView? Прежде всего, вы должны использовать свойство: android:src="drawable"

Если вы используете векторный актив, вам нужно использовать свойство:app:srcCompat="drawable"

Чтобы понять фон, свойства backgroundTint имеют следующий вид: в чем разница между атрибутами background, backgroundTint, backgroundTintMode в макете Android xml?

И чтобы окончательно ответить на ваш вопрос на фоновый оттенок программно, если это то, что вы действительно хотите, то вот ссылка Как добавить оттенок кнопки программно

Надеюсь, поможет!

    imageView.apply {
        setColorFilter(ContextCompat.getColor(context, tintColor), android.graphics.PorterDuff.Mode.MULTIPLY)
        backgroundTintList = ContextCompat.getColorStateList(context, bgTintColor)
    }

Этот вопрос связан, но отвечает за кнопки.

Оригинальный ответ ColdFire


Вы должны использовать setBackgroundTintList(список ColorStateList)

Перейдите по этой ссылке, чтобы узнать, как создать ресурс списка состояний цвета.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="#your_color_here" />
</selector>

затем загрузите его, используя

setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));

где contextInstance является примером Context

используя AppCompat

btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary));
Другие вопросы по тегам