我想在ImageView
中添加一个ColorFilter
。
当前我正在使用:
ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
我已经检查了PotterDuff
中的多种模式,如SRC_IN
, SRC
等,但我在任何模式中都没有得到任何差异……全模式将整个ImageView
变成完美的红色。
我需要在现有的图像中混合红色,使图像看起来带有红色色调....
正确的方法是使用PorterDuff.Mode.LIGHTEN
。
所以更新后的代码将是:
ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
您可以在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" />
其他解决方案,您可以保持PorterDuff.Mode.SRC_ATOP
模式,并使用另一个alpha来获得透明的颜色。
我使用155作为Alpha值:
final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);
这对我有用:
在res/colors.xml:<color name="highlight_color_filter">#A5FF0000</color>
在Activity中初始化过滤器并高亮显示paint:
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);
然后将滤镜应用于ImageView:
ImageView iv=(ImageView)findViewById(ResIdOfImageToFilter);
iv.setColorFilter(redHighLight);
如果不工作尝试应用ImageView drawable:
iv.getDrawable().setColorFilter(redHighLight);
在您的xml文件中,您可以使用tint例如
<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" />
如果您想通过编程方式添加颜色滤镜,请使用
scratchImage_2.setColorFilter(Color.BLACK);
你也可以使用下面的代码删除这个颜色过滤器:
scratchImage_2.setColorFilter(null);