如何将drawable set的颜色更改为android:background?

时间:2016-07-24 09:27:05

标签: android android-layout imageview android-drawable

我的约束布局中有一个如下所示的图标:icon

这是此图片视图的布局xml:

<ImageView
        android:id="@+id/vTotalPaidAvatar"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:contentDescription="@null"
        android:src="@drawable/ic_group_ic_total"
        tools:src="@drawable/ic_group_ic_total"
        app:layout_constraintLeft_toLeftOf="@+id/vSettleDebtsLayout"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        app:layout_constraintTop_toTopOf="@+id/vSettleDebtsLayout"
        android:layout_marginTop="16dp"
        android:background="@drawable/avatar_circle" />

如您所见,图标只是一个美元符号。我将那个灰色圆圈设为背景。问题是我需要动态更改该背景的颜色。美元符号需要保持白色。 我的问题是,有没有办法如何只改变背景的颜色?

另一种解决方案是将该圆圈用作下一个图像视图,然后更改该图像视图的颜色。但我认为这个问题可能会有更多明确的解决方案。

感谢您提示:)

4 个答案:

答案 0 :(得分:4)

尝试:

yourImage.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);

这实际上从src获取背景(没有ImageView)并用颜色覆盖其形状。可绘制和给定颜色组合的方式由Porter Duff模式定义 - here你有更多关于它的信息。

答案 1 :(得分:2)

最佳方式:

public static void colorDrawable(View view, int color) {
    Drawable wrappedDrawable = DrawableCompat.wrap(view.getBackground());
    if (wrappedDrawable != null) {
        DrawableCompat.setTint(wrappedDrawable.mutate(), color);
        setBackgroundDrawable(view, wrappedDrawable);
    }
}

public static void setBackgroundDrawable(View view, Drawable drawable) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
        view.setBackgroundDrawable(drawable);
    } else {
        view.setBackground(drawable);
    }
}

答案 2 :(得分:1)

你必须尝试

android:backgroundTint="your color"
在imageview标签中

这将完成工作

答案 3 :(得分:0)

您是否尝试android:background="@color/my_color"并通过代码imageView.setBackgroundColor(Color.rgb(255, 255, 255));