我想给imageview添加一个颜色滤镜



我想在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);

相关内容

  • 没有找到相关文章

最新更新