3

デフォルトの 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] 

または何!?

更新: 私はそれを仮定します:

  1. 上記のシンプルな Android テーマのボタンにはbtn_default_normal.9.pngを使用しました

  2. 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です。

残念ながら、得られた中間色を実装しても、結果として目的の色が得られません...どこが間違っていますか?

4

1 に答える 1

0

この場合、ソースは customColor で、デスティネーションはボタンの背景です。あなたの式は正しいです。

于 2012-01-20T21:02:21.763 に答える