以编程方式更改ImageView的backgroundTint和Vector Asset for background

时间:2017-08-22 19:32:44

标签: android android-layout imageview android-xml

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

如上所述,我为ImageView背景添加了一个android VectorAsset。
我可以通过下面的xml将Vector Asset的颜色从红色变为蓝色。

android:backgroundTint="@color/colorBlue"

但我想以编程方式更改其颜色。
我尝试了不同的方法,但没有一种方法

5 个答案:

答案 0 :(得分:1)

您可以使用ImageView而不是AppCompatImageView,因为API级别21支持setBackgroundTintList,如果您使用AppCompatImageView,则可以使用{{}更改色调颜色1}}。

所以改变你的ImageView,

setSupportBackgroundTintList

这样你就可以调用<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

答案 1 :(得分:0)

首先,背景和src是ImageView的不同属性。 您是否尝试将图像设置为ImageView?首先,您必须使用该属性: android:src="drawable"

如果您使用的是矢量资产,则需要使用该属性:app:srcCompat="drawable"

要了解背景,backgroundTint属性可以阅读:What is the difference between background, backgroundTint, backgroundTintMode attributes in android layout xml?

并最终以编程方式回答您的背景色调问题,如果这是您真正想要的,那么这里是一个链接How to add button tint programmatically

希望它有所帮助!

答案 2 :(得分:0)

This问题是相关的,但是按钮的答案。

user A.A

的原始答案

您应该使用setBackgroundTintList(ColorStateList list)

按照此link了解如何创建颜色状态列表资源。

<?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));

其中contextInstanceContext

的实例

使用AppCompat

btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary));

答案 3 :(得分:0)

通过编程,您可以这样实现:

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

答案 4 :(得分:0)

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