我在imageView.setColorFilter()
上遇到问题。在我的应用中,我有深色模式(黑色背景,白色文本)和浅色模式(白色背景,黑色文本)。
定位到API 21+,我使用的是由Android Studio生成的矢量资产图标,该图标为白色,默认情况下在xml文件中为android:tint="#FFFFFF"
和android:fillColor="#FF000000"
。
按照material design,图标具有适用于不同状态的某些alpha。我正在使用状态Active + Unfocused
,其中黑色图标= #8A000000
和白色图标= #B3FFFFFF
。
在黑暗模式下,图标将在黑色背景上显示为灰色,这与应用Alpha时的情况完全相同。但是,在灯光模式下,无论上面的alpha值如何,图标都是100%黑色。我正在使用默认值为imageView.setColorFilter()
的PorterDuff.Mode.SRC_ATOP
应用颜色。
这是怎么回事,我该如何解决?谢谢。
最佳答案
在写这个问题时,我做了一些尝试,然后亲自解决了这个问题。
问题是,根据矢量xml,图标本身为BLACK(#FF000000
)。 Android Studio仅使用白色对其进行了着色。
因此,使用PorterDuff.Mode.SRC_ATOP
混合源像素和目标像素(均为黑色)不会导致可见变化。为了完全替换原始图标的颜色,我改用了PorterDuff.Mode.SRC_IN
。在这种情况下,我可以在两种模式下使用相同的向量xml。
根据官方文档
PorterDuff.Mode.SRC_ATOP-保留源像素未覆盖的目标像素。丢弃源像素覆盖的目标像素。丢弃所有源像素。
PorterDuff.Mode.SRC_IN-保留覆盖目标像素的源像素,丢弃其余的源像素和目标像素。