【问题标题】:ImageView setColorFilter alpha lostImageView setColorFilter alpha 丢失
【发布时间】:2018-12-26 17:41:00
【问题描述】:

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

这里发生了什么,我该如何解决?谢谢。

【问题讨论】:

    标签: android colors imageview colorfilter


    【解决方案1】:

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

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

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

    根据官方文档

    PorterDuff.Mode.SRC_ATOP - 保留未被源像素覆盖的目标像素。丢弃被源像素覆盖的目标像素。丢弃所有源像素。

    PorterDuff.Mode.SRC_IN - 保留覆盖目标像素的源像素,丢弃剩余的源像素和目标像素。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-07-02
      • 2014-06-10
      • 2012-11-20
      • 1970-01-01
      相关资源
      最近更新 更多