0

这个问题在某种意义上是对这篇文章的跟进,并且基于这篇文章中显示的解决方案。但无论如何,我会尝试以完整的方式询问它。

我有一个带有背景选择器的自定义按钮,该选择器由正常状态 Drawable 和按下状态 Drawable 组成。Drawables 颜色在方法onSizeChanged()中使用PorterDuffColorFilter

getBackground().mutate().setColorFilter(backGroundColor, Mode.MULTIPLY);

这部分工作正常。但我想通过更改@kcoppock 在他的帖子中指出的色调来改进颜色选择。

  • 我使用推荐的代码创建了一个ColorMatrixColorFIlter,我使用调试器在 Eclipse 中看到了矩阵,看起来还不错。
  • 当我尝试使用ColorMatrixColorFIlter而不是PorterDuffColorFilter按钮时,drawables 保持无色,就好像没有应用过滤器或没有效果一样。

第二个相关的问题:如何将选择器中的每个 Drawable 更改为不同的颜色?

编辑
更多信息,在使用调试器的代码之后,我看到了这个矩阵,色调偏移为 240 度(或 -120 度)(浮点数被剪裁到小数点后 3 位)

[ 0.004, 1.692, -0.696, 0.000, 0.000 ]
[ 0.196, 0.451,  0.353, 0.000, 0.000 ]
[ 1.001, 0.453, -0.454, 0.000, 0.000 ]
[ 0.000, 0.000,  0.000, 1.000, 0.000 ]

据我了解,该矩阵不在单位矩阵附近,您甚至可以看到每行总和恰好为 1,因此颜色应该发生变化。我应该在我的按钮上看到一些颜色变化。
此外,只是为了看到这个矩阵正在被采用,我对其进行了硬编码以删除 R 分量

[ 0 0 0 0 0 ]
[ 0 1 0 0 0 ]
[ 0 0 1 0 0 ]
[ 0 0 0 1 0 ]

然后我看到青色的按钮,这意味着过滤器正在工作,但我无法获得色调变化。

4

1 回答 1

0

在调试代码并确保矩阵生成正常并应用过滤器后,我开始怀疑问题不在于代码,而在于我用于按钮的基本图像。
基本图像是 Photoshop 生成的 24 位 PNG,带有透明胶片,所有颜色均为灰色阴影。
我用Microsoft Office 图片管理器打开它,然后转到编辑图片...颜色工具。
令我惊讶的是,改变色调也没有改变颜色。我必须移动Amount滑块来获得一些颜色,然后色调才有效果。

因此,出于所有实际目的,这个问题得到了解决。

注意:我应该更清楚,因为我还研究了如何将颜色从 RGB 转换为 HSL 以获得所需的色调。并且转换算法清楚地区分了彩色和彩色。无彩色是那些 R=G=B 的颜色,对于它们来说,色调值是未定义的,并且没有任何意义,因为饱和度为 0。因此,可能将色调偏移应用于 Achromatic 值根本不会改变它。

于 2013-05-01T16:03:29.413 回答