2016-05-12 4 views
1

Пусть я быть_наст цвет фона установлен как # AF 000000 (AA RRGGBB) в андроид. Я хочу значение альфа-канала (AA) в десятичной системе счисления (0-255), которая собирается быть 175.Получение значения А в ARGB цвета фона в андроиде программного

Как выполнить это программно?

+0

вы можете конвертировать hex2decimal –

ответ

1

Вот чисто Java решение, которое Безразлично» t используйте Android-метод getAlpha().

У вас есть это значение, хранящееся в String или int? Если у вас есть в String, сначала избавиться от # символа, а затем преобразовать его в int:

String hexString = "#05000000"; 
int color = Integer.parseInt(hexString.replaceAll("#", ""), 16); 

Затем нам нужно сделать некоторые манипуляции с битами. Это шестнадцатеричное представление цвета означает (в режиме ARGB) у вас есть значения #AARRGGBB. Это 2 байта для каждого канала, включая альфа-один. Чтобы получить только альфа-канал (AA часть шестнадцатеричного значения), нам нужно «надавить его на 6 байт вправо» (Java - это Big Endian languange), поэтому мы можем в итоге чего-то вроде #000000AA. Так как каждый байт состоит из 8 битов, мы должны «толчок» альфа значения 6 * 8 = 24 биты «вправо»:

int alpha = color >> 24; 

Этот процесс называется Bit Shifting. Все крайние правые значения RGB отбрасываются, и мы затем альфа-значение, хранящееся в int с десятичного значения от 0 до 255.

EDIT: Если у вас уже есть альфа-значение, возвращаемое из getAlpha(), вам всегда можно умножить на 255 и этаже:

int alpha = Math.floor(myView.getAlpha() * 255); 
+0

Я согласен с этой идеей. Но просто преобразуйте десятичное значение в ближайшее соответствующее целое число, где 0 равно 0, а 1 - 255. Затем преобразуйте в hex. Это мешает вам работать со строкой слишком много. – AxelH

+0

Предоставляемая информация отвечает на ваш вопрос? Если это так, отметьте это как принято. Если нет, сообщите нам, почему в комментариях, чтобы мы могли помочь вам дальше. – mgaldieri

0

Вы можете конвертировать HEX в десятичные Просто используйте,

int i= Integer.parseInt(HEX_STR,16); 

или, если вам нужно передать средства значение длинные шестигранные использовать как,

public static long hexToLong(String hex) { 
return Long.parseLong(hex, 16); 
} 
+0

вы сказали «здесь HEX_STR ваш getAlpha() в HEX.» Но getAlpha() возвращает значение между 0 и 1? – user6265154

Смежные вопросы