我在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-保留覆盖目标像素的源像素,丢弃其余的源像素和目标像素。

10-04 17:36