我需要找到一种方法来更改Android中位图的颜色。我需要根据int
值在我的应用程序中顺利替换/更改椭圆图像的颜色。我需要类似 如果myValue=5
而不是将图像的颜色更改为RED
以及myValue=322
将颜色更改为BLUE
.我发现我可以做到这一点的唯一方法是使用 xml 文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" android:padding="10dp">
<!-- you can use any color you want I used here gray color-->
<solid android:color="#cccccc"/>
<corners
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
</shape>
之后,当myValue
更改以设置我的ImageView
图像资源时。但是通过这种方式,我必须创建 35 个不同的 xml 文件......我认为这不是一个好主意。
那么有人可以提出更好的解决方案来做到这一点吗?
这就是我解决这个问题的方式:
- 声明
ImageView
与src="@drawable/button"
- 创建一个
Drawable
并为其设置ColorFilter
,然后将其用作您声明ImageView
的 src,如下所示:
>
Drawable myIcon = getResources().getDrawable( R.drawable.button );
ColorFilter filter = new LightingColorFilter( Color.BLUE, Color.BLUE );
myIcon.setColorFilter(filter);
color.setImageDrawable(myIcon);
这个解决方案对我来说效果不佳。在某些图像中,最终颜色是错误的。我改用这个解决方案:
Drawable myIcon = getResources().getDrawable(R.drawable.your_image);
myIcon.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
((ImageView)findViewById(R.id.view_to_change)).setImageDrawable(myIcon);
getResources().getDrawable( R.drawable.button );
现已弃用。也可以这样做:
((ImageView) findViewById(R.id.my_icon))
.setColorFilter(new LightingColorFilter(Color.BLUE, Color.BLUE));
你应该这样做。
Drawable myIcon = getResources().getDrawable( R.drawable.button );
ColorFilter filter = new LightingColorFilter( Color.BLACK, Color.BLACK);
myIcon.setColorFilter(filter);
您可以使用 TransitionDrawable 来实现此目的 - http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
试试这个:
private final ImageView uiIV_statusIcon;
uiIV_statusIcon = anyView.findViewById(R.id.iv_status);
uiIV_statusIcon.setImageResource(R.drawable.ic_twotone_error_24);
在活动中:
ImageViewCompat.setImageTintList(uiIV_statusIcon, ColorStateList.valueOf(getColor(R.color.md_red_400)));
在片段中
ImageViewCompat.setImageTintList(uiIV_statusIcon, ColorStateList.valueOf(getContext().getColor(R.color.md_red_400)));
在具有预分配变量_context的回收器视图适配器中:
ImageViewCompat.setImageTintList(uiIV_statusIcon, ColorStateList.valueOf(_context.getColor(R.color.md_red_400)));