我想添加一个颜色filter的ImageView

我想添加一个ColorFilterImageView

目前我正在使用:

 ImageView iv = (ImageView)findViewById(resIdOfImageToFilter); iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP); 

我已经检查过PotterDuff多个模式,比如SRC_INSRC等,但是我没有在任何模式上有任何区别…所有模式都将完整的ImageView为完美的红色。

我需要在现有的图像中混合RED颜色,使图像看起来与REDDISH色调….

Solutions Collecting From Web of "我想添加一个颜色filter的ImageView"

正确的方法是使用PorterDuff.Mode.LIGHTEN

所以更新的代码将如下所示:

 ImageView iv = (ImageView)findViewById(resIdOfImageToFilter); iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN); 

这对我工作:

在res / colors.xml中:

 <color name="highlight_color_filter">#A5FF0000</color> 

在你的活动初始化filter,并突出显示油漆:

 int highlightColor = context.getResources().getColor(R.color.highlight_color_filter); PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(highlightColor, PorterDuff.Mode.SRC_ATOP); Paint redHighLight = new Paint(); redHighLight.setColorFilter(targetHitFilter); redHighLight.setAlpha(190); 

然后将filter应用于ImageView:

 ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter); iv.setColorFilter(redHighLight); 

如果这不起作用,请尝试应用于ImageView drawable:

 iv.getDrawable().setColorFilter(redHighLight); 

希望有所帮助。

你可以在你的xml文件中使用android:tint ( link )。 例:

 <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/your_drawable" android:tint="@color/your_color" /> 

其他的解决scheme,你可以保持PorterDuff.Mode.SRC_ATOP模式,并使用另一个alpha有一个透明的颜色。

我使用155作为Alpha值:

  final int semiTransparentGrey = Color.argb(155, 185, 185, 185); drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP); 

在你的XML文件,你可以用户色调例如

  <ImageView android:id="@+id/scrachImage_1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:tint="@color/colorAccent" android:src="@drawable/eagle" /> 

如果你想以编程方式添加颜色filter,然后使用

 scratchImage_2.setColorFilter(Color.BLACK); 

您也可以使用以下代码删除此颜色filter:

scratchImage_2.setColorFilter(null);