PorterDuff.Mode.MULTIPLY - Android中这种颜色转换的一种形式

时间:2012-01-20 17:59:57

标签: android background-color argb colortransform porter-duff

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

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

buttons 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_dark.9.png 用于Android Holo主题

  3. 要解决Holo Theme下的颜色问题,我想进行从第二种(Holo)颜色#66999999 到第一种颜色#F2E1E1E1 的中间转换:< / p>

    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
    

    因此,中间色是#23898989

    不幸的是,实现获得的中间色我仍然没有得到理想的颜色......我哪里错了?

1 个答案:

答案 0 :(得分:0)

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