Программно изменить 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));