Android如何改变ImageView/Bitmap的颜色?

8

我需要找到一种在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文件...我认为这不是一个好主意。
有没有人能提供更好的解决方案?
6个回答

21

这是我解决这个问题的方法:

  1. 声明一个带有 src="@drawable/button" 属性的 ImageView
  2. 创建一个 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);

你能否也提及如何在XML中实现这个功能吗? - Bhargav
4
我找到了,必须在imageviewandroid:tint属性中使用。 - Bhargav

16

这个解决方案对我来说效果不是很好。在某些图像中,最终颜色是错误的。 我使用了这个解决方案代替:

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

3
getResources().getDrawable( R.drawable.button );

现在已经过时了。也可以这样做:

((ImageView) findViewById(R.id.my_icon))
  .setColorFilter(new LightingColorFilter(Color.BLUE, Color.BLUE));

1

你应该这样做。

Drawable myIcon = getResources().getDrawable( R.drawable.button ); 
ColorFilter filter = new LightingColorFilter( Color.BLACK, Color.BLACK);
myIcon.setColorFilter(filter);

0

我看到了那个选项,但没有找到任何好的示例或说明如何使用它。 - Android-Droid
https://dev59.com/r3E85IYBdhLWcg3wx2n2 - asenovm

0

试试这个:

private final ImageView uiIV_statusIcon;
uiIV_statusIcon = anyView.findViewById(R.id.iv_status);
uiIV_statusIcon.setImageResource(R.drawable.ic_twotone_error_24);

在Activity中:

ImageViewCompat.setImageTintList(uiIV_statusIcon, ColorStateList.valueOf(getColor(R.color.md_red_400)));

在一个Fragment中

ImageViewCompat.setImageTintList(uiIV_statusIcon, ColorStateList.valueOf(getContext().getColor(R.color.md_red_400)));

在一个具有预分配变量 _context 的 RecyclerViewAdapter 中:

ImageViewCompat.setImageTintList(uiIV_statusIcon, ColorStateList.valueOf(_context.getColor(R.color.md_red_400)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接