ImageView setColorFilter alpha 丢失

ImageView setColorFilter alpha lost

我在使用 imageView.setColorFilter() 时遇到了问题。在我的应用程序中,我有深色模式(黑色背景,白色文本)和浅色模式(白色背景,黑色文本)。

针对 API 21+,我使用由 Android Studio 生成的白色矢量资产图标,默认情况下 android:tint="#FFFFFF"android:fillColor="#FF000000" 在 xml 个文件。

根据 material design,图标已针对不同状态应用了特定的 alpha。我正在使用 Active + Unfocused 的状态,其中黑色图标 = #8A000000 和白色图标 = #B3FFFFFF.

在深色模式下,图标会在黑色背景上显示为灰色,这正是应用了 alpha 后的样子。然而,在浅色模式下,无论上面的 alpha 值如何,图标都是 100% 黑色。我使用 imageView.setColorFilter() 应用颜色,默认为 PorterDuff.Mode.SRC_ATOP

这是怎么回事,我该如何解决?谢谢。

在写这个问题的时候,我尝试了一些东西,然后自己解决了这个问题。

问题是根据向量 xml,图标本身是黑色的 (#FF000000)。 Android Studio 仅将其着色为白色。

使用PorterDuff.Mode.SRC_ATOP,源像素和目标像素(均为黑色)的混合因此不会导致可见变化。为了完全替换掉原来的图标颜色,我用了PorterDuff.Mode.SRC_IN代替。在这种情况下,我可以在两种模式下使用相同的矢量 xml。

根据官方文档

PorterDuff.Mode.SRC_ATOP - Keeps the destination pixels that are not covered by source pixels. Discards destination pixels that are covered by source pixels. Discards all source pixels.

PorterDuff.Mode.SRC_IN - Keeps the source pixels that cover the destination pixels, discards the remaining source and destination pixels.