29

我想添加一个ColorFilterImageView.

目前我正在使用:

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

我已经检查了多种模式,PotterDuff例如SRC_INSRC等等,但我在任何模式中都没有任何区别......所有模式都将整体变成ImageView完美的红色。

我需要在现有图像中混合红色,以便图像看起来带有红色色调......

4

5 回答 5

40

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

因此更新后的代码将如下所示:

ImageView iv = (ImageView)findViewById(resIdOfImageToFilter);
iv.setColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);
于 2013-01-25T06:34:57.690 回答
12

您可以在 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" />
于 2017-01-01T07:56:24.447 回答
8

这对我有用:

在 res/colors.xml 中:

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

在您的活动中初始化过滤器并突出显示绘画:

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 可绘制对象:

iv.getDrawable().setColorFilter(redHighLight);

希望有帮助。

于 2011-11-19T14:43:17.083 回答
8

其他解决方案,您可以保持PorterDuff.Mode.SRC_ATOP模式并使用另一个 alpha 来获得透明颜色。

我使用 155 作为 Alpha 值:

  final int semiTransparentGrey = Color.argb(155, 185, 185, 185);
  drawable.setColorFilter(semiTransparentGrey, PorterDuff.Mode.SRC_ATOP);
于 2013-09-05T15:10:28.130 回答
1

在您的 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);

于 2017-07-30T05:22:59.177 回答