在默认的 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.getBackground()),而D是我的 customColor 的一个“点”......我怎样才能从这个公式中重现新的变换颜色?这是否意味着新颜色N是:
[Na, Nr, Ng, Nb] = [Sa * Da, Sr * Dr, Sg * Dg, Sb * Db]
或者是什么!?
更新: 我想:
btn_default_normal.9.png用于简单 Android 主题中的上述按钮
btn_default_normal_holo_dark.9.png用于 Android Holo 主题
为了解决 Holo 主题下的颜色问题,我想从第二种(Holo)颜色#66999999到第一种颜色#F2E1E1E1进行中间转换:
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。
不幸的是,实施获得的中间颜色我仍然没有得到想要的颜色......我错在哪里?