Android: цветовые коды

Я реализую палитру цветов, используя библиотеку от AmbilWarna, с включенным альфа-каналом.

Пример кода выглядит следующим образом: https://code.google.com/p/android-color-picker/

Пока цветовой код возвращается,

  • ярко-зеленый со средней прозрачностью: код цвета = 1980104448
  • ярко-желтый со средней прозрачностью: код цвета = 1912340224
  • ярко-красный без прозрачности: код цвета = -65536 (отрицательный?)
  • белый без прозрачности: цветовой код = -1
  • белый со 100% прозрачностью: код цвета = 16777215

Вопрос:

Я хотел бы использовать этот возвращенный цветовой код для установки цвета фона кнопок. Как можно интерпретировать эти цветовые коды? И почему некоторые из них отрицательны? Нужно ли конвертировать в коды RGB?


person pearmak    schedule 03.08.2014    source источник
comment
Вы можете напрямую использовать эти значения для установки цвета фона.   -  person nhaarman    schedule 03.08.2014


Ответы (1)


Все значения в десятичном формате.

white with 100% transparency: color code = 16777215

16777215(10) = FFFFFF(16)

Вам не нужно преобразовывать это, вы можете установить это напрямую.

myView.setBackgroundColor(value);

Если у вас есть шестнадцатеричное значение ex "#FFFFFF", мы должны установить как

myView.setBackgroundColor (Color.parseColor ("#FFFFFF"));

Color.parseColor ("#FFFFFF");, который inturn возвращает int

Приведенный ниже метод скопирован из android.graphics.Color.java

/**
 * Parse the color string, and return the corresponding color-int.
 * If the string cannot be parsed, throws an IllegalArgumentException
 * exception. Supported formats are:
 * #RRGGBB
 * #AARRGGBB
 * 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta',
 * 'yellow', 'lightgray', 'darkgray', 'grey', 'lightgrey', 'darkgrey',
 * 'aqua', 'fuschia', 'lime', 'maroon', 'navy', 'olive', 'purple',
 * 'silver', 'teal'
 */
public static int parseColor(String colorString) {
    if (colorString.charAt(0) == '#') {
        // Use a long to avoid rollovers on #ffXXXXXX
        long color = Long.parseLong(colorString.substring(1), 16);
        if (colorString.length() == 7) {
            // Set the alpha value
            color |= 0x00000000ff000000;
        } else if (colorString.length() != 9) {
            throw new IllegalArgumentException("Unknown color");
        }
        return (int)color;
    } else {
        Integer color = sColorNameMap.get(colorString.toLowerCase(Locale.ROOT));
        if (color != null) {
            return color;
        }
    }
    throw new IllegalArgumentException("Unknown color");
}
person VenomVendor    schedule 03.08.2014
comment
нужно ли преобразовывать десятичное в шестнадцатеричное перед синтаксическим анализом цветов? - person pearmak; 03.08.2014
comment
нет, вы можете использовать эти целые числа для установки цвета фона. - person Vahe Muradyan; 03.08.2014
comment
@pearmak Нет; лежащие в основе числа не являются ни десятичными, ни шестнадцатеричными по своей сути; они, конечно, хранятся в двоичном формате. Просто их легче читать, когда они описываются в шестнадцатеричном формате, поскольку каждая пара шестнадцатеричных цифр - один байт - представляет определенную часть цвета. Например, ваш ярко-зеленый со средней прозрачностью - 1980104448. В шестнадцатеричном формате это 0x7605FF00 - 0x76 прозрачный, 0x05 красный, 0xFF зеленый, 0x00 синий. Мы используем шестнадцатеричные обозначения, потому что их легко читать, учитывая способ хранения значений цвета. Просто взглянув, можно увидеть, что он преимущественно зеленый. - person Matt Gibson; 03.08.2014