デフォルトの Android テーマの下に、3 つのカスタム カラー ボタンがあります。
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]
または何!?
更新: 私はそれを仮定します:
上記のシンプルな Android テーマのボタンにはbtn_default_normal.9.pngを使用しました
btn_default_normal_holo_dark.9.pngは Android Holo テーマに使用されます
Holo テーマでの色の問題を修正するために、2 番目 (Holo) の色#66999999から最初の色# F2E1E1E1 への中間変換を行います。
button.getBackground().setColorFilter(some_Intermediate_Color, PorterDuff.Mode.MULTIPLY);
次に、新しいホロ テーマが導入される前に使用したのと同じ変換を適用します。この中間色を計算するには、2 つのディオファントス方程式を 16 進法で解く必要があります。ここで、Na、Nc は [0, FF] の区間にあり、m、n - は整数です。
66*Na = F2 + 100*m; => Na = 23
99*Nc = E1 + 100*n; => Nc = 89
したがって、中間色は#23898989です。
残念ながら、得られた中間色を実装しても、結果として目的の色が得られません...どこが間違っていますか?