2012-01-20 27 views
3

的SENCE在默認的Android主題我有三個自定義的彩色按鈕由PorterDuff.Mode.MULTIPLY - 這種顏色變換在Android的

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

buttons http://img94.imageshack.us/img94/1723/themew.jpg

意味着,當我通過切換到Theme.Holo /values-v11/styles.xml的手段

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

顏色被改變爲:

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

正如我懷疑,默認按鈕的顏色在新的全息主題是改變,並用相同的變換參數它給人意想不到的顏色被改變。我想保留初始顏色。爲此,我必須知道PorterDuff.Mode.MULTIPLY的轉換規則。我從Android文檔獲得的所有內容是

[Sa * Da, Sc * Dc] 

這是什麼意思?也許,小號是源位圖的一個點(按鈕,繪製button.getBackground())和d是我customColor的「點」 ......我怎樣才能重現新的轉變顏色從這個公式?這是否意味着新的顏色ñ是:

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

或什麼!

UPDATE: 我假設:

  1. btn_default_normal.9.png用於在簡單的Android主題以上按鈕

  2. btn_default_normal_holo_dark.9.png用於Android的全息主題

要解決的問題與下全息主題顏色,我想從第二(全息)顏色使中間變換#66999999第一顏色#F2E1E1E1

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

然後applay的與我在介紹新的Holo主題之前所使用的相同的轉換。爲了計算該中間色我必須解決在十六進制系統中的兩個不定方程其中的Na,NC是在區間[0,FF]且m,n - 爲整數:

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

因此,中間顏色爲# 23898989

不幸的是,實施獲得的中間顏色我還沒有得到想要的顏色,結果......我在哪裏錯了?

回答

0

在這種情況下,源是customColor,目標是按鈕的背景。你的公式是正確的,但。

+0

感謝您的回答!請看看我上面的更新! – isabsent

+0

PorterDuff.Mode.MULITPLY是什麼意思? – jonney