我的约束布局中有一个如下所示的图标: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" />
如您所见,图标只是一个美元符号。我将那个灰色圆圈设为背景。问题是我需要动态更改该背景的颜色。美元符号需要保持白色。 我的问题是,有没有办法如何只改变背景的颜色?
另一种解决方案是将该圆圈用作下一个图像视图,然后更改该图像视图的颜色。但我认为这个问题可能会有更多明确的解决方案。
感谢您提示:)
答案 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));
?