PorterDuff.Mode.MULTIPLY-Android中这种颜色转换的感觉



在默认的Android主题下,我有三个通过自定义的彩色按钮

button.getBackground().setColorFilter(customColor, PorterDuff.Mode.MULTIPLY);

按钮http://img94.imageshack.us/img94/1723/themew.jpg

当我通过/values-v11/styles.xml切换到Theme.Holo时

<style name="Theme" parent="android:Theme.Holo"> 

颜色更改为:

http://img710.imageshack.us/img710/1659/themeholo.jpg

正如我所怀疑的,默认按钮的颜色在新的Holo主题中发生了变化,并使用相同的转换参数进行转换,它会产生意想不到的颜色。我想保留最初的颜色。为此,我必须了解PorterDuff.Mode.MULTIPLY的转换规则。我从Android文档中得到的只是

[Sa * Da, Sc * Dc] 

这意味着什么?可能,S是源位图的一个点(button drawable button.getBackground()),而D则是我的customColor的一个"点"。。。如何从这个公式中复制新的转换颜色?这是否意味着新颜色N是:

[Na, Nr, Ng, Nb] = [Sa * Da, Sr * Dr, Sg * Dg, Sb * Db] 

还是什么!?

更新:我想:

  1. btn_default_normal.9.png用于简单Android主题中的上述按钮

  2. btn_default_normal_holo_mark.9.png用于Android holo主题

为了解决Holo主题下的颜色问题,我想从第二种(Holo)颜色#66999999到第一种颜色#F2E1E1进行中间转换:

button.getBackground().setColorFilter(some_Intermediate_Color, PorterDuff.Mode.MULTIPLY);

然后为我在引入新的Holo主题之前使用的相同转换鼓掌。为了计算这个中间颜色,我必须求解十六进制系统中的两个丢番图方程,其中Na,Nc在区间[0,FF]中,m,n-是整数:

66*Na = F2 + 100*m; => Na = 23
99*Nc = E1 + 100*n; =>  Nc = 89

因此,中间颜色是#238898989

不幸的是,在实现所获得的中间颜色时,我仍然没有得到所需的颜色。。。我哪里错了?

在这种情况下,源为customColor,目标为按钮的背景。不过你的公式是正确的。

相关内容

  • 没有找到相关文章

最新更新