PorterDuff.Mode.MULTIPLY - смысл этого преобразования цвета в Android - PullRequest
3 голосов
/ 20 января 2012

В теме Android по умолчанию у меня есть три пользовательских цветных кнопки с помощью

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

кнопки 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

Как я подозреваю, цвет кнопки по умолчанию был изменен в новой теме Holo и, будучи преобразованным с тем же параметром преобразования, дает неожиданные цвета. Я хотел бы сохранить исходные цвета. Для этого мне нужно знать правила преобразования PorterDuff.Mode.MULTIPLY . Все, что у меня есть из Android документов, это

[Sa * Da, Sc * Dc] 

Что это значит? Возможно, S - это точка исходного растрового изображения (кнопка drawable button.getBackground ()), а D - это "точка" моего customColor ... Как я могу воспроизвести новый преобразованный цвет из этой формулы? Означает ли это, что новый цвет N :

[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

Чтобы устранить проблему с цветами в Holo Theme, я хочу сделать промежуточное преобразование из второго (Holo) цвета # 66999999 в первый цвет # F2E1E1E1 :

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

и затем примените то же преобразование, которое я использовал до появления новой темы Холо. Чтобы вычислить этот промежуточный цвет, я должен решить два диофантовых уравнения в шестнадцатеричной системе, где Na, Nc находятся в интервале [0, FF], а m, n - целые числа:

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

Следовательно, промежуточный цвет равен # 23898989 .

К сожалению, при реализации полученного промежуточного цвета я все равно не получаю желаемых цветов в результате ... Где я не прав?

1 Ответ

0 голосов
/ 21 января 2012

В этом случае источником является customColor, а местом назначения является фон кнопки. Ваша формула верна.

...