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.
我在使用 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.