8

我需要找到一种方法来更改 Android 中位图的颜色。我需要根据int值在我的应用程序中平滑地替换/更改椭圆形图像的颜色。我需要类似 if myValue=5than change my image's color to REDand if myValue=322change color to之类的东西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 文件……我认为这不是一个好主意。

那么谁能提出更好的解决方案来做到这一点?

4

6 回答 6

21

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

  1. 声明一个ImageViewwithsrc="@drawable/button"
  2. 创建一个Drawable并设置ColorFilter它,然后将它用作您声明的 src ,ImageView如下所示:

>

Drawable myIcon = getResources().getDrawable( R.drawable.button );
ColorFilter filter = new LightingColorFilter( Color.BLUE, Color.BLUE );
myIcon.setColorFilter(filter);
color.setImageDrawable(myIcon);
于 2012-05-07T14:19:03.433 回答
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);
于 2014-01-24T21:23:14.683 回答
3
getResources().getDrawable( R.drawable.button );

现在已弃用。也可以这样做:

((ImageView) findViewById(R.id.my_icon))
  .setColorFilter(new LightingColorFilter(Color.BLUE, Color.BLUE));
于 2015-10-22T01:17:54.757 回答
1

你应该这样。

Drawable myIcon = getResources().getDrawable( R.drawable.button ); 
ColorFilter filter = new LightingColorFilter( Color.BLACK, Color.BLACK);
myIcon.setColorFilter(filter);
于 2013-03-07T08:52:38.510 回答
0

您可以使用 TransitionDrawable 来实现这一点 - http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html

于 2012-05-04T13:40:22.220 回答
0

试试这个:

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 的 Recyclerviewadapter 中:

ImageViewCompat.setImageTintList(uiIV_statusIcon, ColorStateList.valueOf(_context.getColor(R.color.md_red_400)));
于 2021-10-07T09:34:05.857 回答