ColorMatrixColorFilter未应用于自定义按钮背景

时间:2013-05-01 08:22:25

标签: android button custom-controls colorfilter colormatrixfilter

此问题在某种意义上是this post的后续行动,基于the solution showed on this post。但无论如何,我会试着以完整的方式提出这个问题。

我有一个自定义按钮,背景选择器由普通状态Drawable和按下状态Drawable组成。使用onSizeChanged()

在方法PorterDuffColorFilter中更改了Drawables颜色
getBackground().mutate().setColorFilter(backGroundColor, Mode.MULTIPLY);

这部分工作正常。但是我希望通过改变his post中@kcoppock指出的Hue来改善颜色选择。

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

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

修改
一些更多的信息,跟随调试器的代码,我看到这个矩阵,用于240度(或-120度)的Hue移位(浮动剪辑到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 ]

然后我看到CYAN颜色的按钮,这意味着过滤器正在工作,但是我无法获得色调偏移。

1 个答案:

答案 0 :(得分:0)

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

所有实际目的都解决了这个问题。

注意:我应该知道的更好,因为我研究了如何将颜色从RGB转换为HSL o获得所需的Hue。转换算法明确区分消色差颜色与 Chromatic 颜色。消色差是R = G = B的颜色,对于它们,色调值是未定义的,因为饱和度为0,所以没有任何意义。因此,将Hue偏移应用于消色差值根本不会改变它。