Понимание цвета на Android (шесть символов)

212

Я пытаюсь понять, как цвета работают в Android. Я установил этот цвет в качестве фона моего LinearLayout, и я получил серый фон с некоторой прозрачностью:

<gradient android:startColor="#b4555555" android:endColor="#b4555555"
 android:angle="270.0" />

Если я удаляю последние два символа (55), я получаю сплошной цвет, теряя прозрачность. Я пытался найти страницу, где я мог бы найти какое-то объяснение по этому поводу, но я не смог его найти.

Тьяго
источник

Ответы:

170

Если вы предоставите 6 шестнадцатеричных цифр, это означает RGB (2 шестнадцатеричные цифры для каждого значения красного, зеленого и синего).

Если вы предоставите 8 шестнадцатеричных цифр, это ARGB (2 шестнадцатеричные цифры для каждого значения альфа, красный, зеленый и синий соответственно).

Таким образом, удаляя последние 55, вы переходите от A = B4, R = 55, G = 55, B = 55 (в основном прозрачный серый) к R = B4, G = 55, B = 55 (полностью не Прозрачный сумеречный мизинец)

См. «Цветную» документацию для поддерживаемых форматов.

Джон Скит
источник
А как установить прозрачность textView через код? Я хочу преобразовать значение ARGB в int, чтобы потом использовать его в методе textView.setBackgroundColor (int color). Является ли это возможным? Есть ли другой способ добиться этого?
Марек
@Marek: значение ARGB является целым, эффективно. См. Документы по адресу developer.android.com/reference/android/graphics/Color.html (см. <<На странице).
Джон Скит
но он не отформатирован как #AARRGGBB. Затем он форматируется как 0xAARRGGBB. Вот почему я не мог использовать его в методе setBackgroundColor. Я мог бы использовать Color.parseColor ("# AARRGGBB)
Марек
@Marek: Это не «отформатировано» - это просто целое число. Вы можете комбинировать различные биты, как указано в документации.
Джон Скит
1
@Toaster: Нет, прозрачность.
Джон Скит
1184

Android использует шестнадцатеричные значения ARGB, которые отформатированы как #AARRGGBB. Эта первая пара букв, АА, представляет альфа-канал. Вы должны преобразовать свои десятичные значения непрозрачности в шестнадцатеричное значение. Вот шаги:

Alpha Hex Value Process

  1. Возьмите непрозрачность в качестве десятичного значения и умножьте ее на 255. Итак, если у вас есть блок, непрозрачный на 50%, десятичное значение будет равно .5. Например: .5 х 255 = 127,5
  2. Дробь не будет преобразована в шестнадцатеричное, поэтому вы должны округлить свое число вверх или вниз до ближайшего целого числа. Например: 127,5 раундов до 128; 55,25 раундов до 55.
  3. Введите десятичное значение в десятичный-шестнадцатеричный конвертер, например http://www.binaryhexconverter.com/decimal-to-hex-converter , и конвертируйте свои значения.
  4. Если вы получите только одно значение, добавьте к нему ноль. Например, если вы пытаетесь получить непрозрачность 5% и проходите этот процесс, вы получите шестнадцатеричное значение D. Добавьте ноль перед ним, чтобы он выглядел как 0D.

Вот как вы находите значение альфа-канала. Я позволил себе составить список ценностей для вас. Наслаждайтесь!

Шестнадцатеричные значения непрозрачности

  • 100% - FF
  • 95% - F2
  • 90% - E6
  • 85% - D9
  • 80% - СС
  • 75% - BF
  • 70% - B3
  • 65% - А6
  • 60% - 99
  • 55% - 8C
  • 50% - 80
  • 45% - 73
  • 40% - 66
  • 35% - 59
  • 30% - 4D
  • 25% - 40
  • 20% - 33
  • 15% - 26
  • 10% - 1А
  • 5% - 0D
  • 0% - 00
BlondeFurious
источник
37
Основа на Android: руководство по дизайну цветов материала: google.com/design/spec/style/… Больше ключа Hex Opacity Значения: 100%: FF 87%: DE 70%: B3 54%: 8A 30%: 4D 26%: 42 12 %: 1F
cn123h
Здесь вы найдете все значения: dtp-aus.com/hexadeci.htm, и вы можете получить альфа 0-100, разделив число на 255 и
умножив
на 12% альфа: echo "obase=16; ibase=10; (255*12+50)/100" | bc. (+50 - для округления до ближайшего значения, это 100/2 на самом деле)
vigilancer
195

Уходя ответ от @BlondeFurious , вот некоторые Java - код , чтобы получить каждое шестнадцатеричное значение от 100% до 0% альфа:

for (double i = 1; i >= 0; i -= 0.01) {
    i = Math.round(i * 100) / 100.0d;
    int alpha = (int) Math.round(i * 255);
    String hex = Integer.toHexString(alpha).toUpperCase();
    if (hex.length() == 1)
        hex = "0" + hex;
    int percent = (int) (i * 100);
    System.out.println(String.format("%d%% — %s", percent, hex));
}

Вывод:

100%  FF
99%  FC
98%  FA
97%  F7
96%  F5
95%  F2
94%  F0
93%  ED
92%  EB
91%  E8
90%  E6
89%  E3
88%  E0
87%  DE
86%  DB
85%  D9
84%  D6
83%  D4
82%  D1
81%  CF
80%  CC
79%  C9
78%  C7
77%  C4
76%  C2
75%  BF
74%  BD
73%  BA
72%  B8
71%  B5
70%  B3
69%  B0
68%  AD
67%  AB
66%  A8
65%  A6
64%  A3
63%  A1
62%  9E
61%  9C
60%  99
59%  96
58%  94
57%  91
56%  8F
55%  8C
54%  8A
53%  87
52%  85
51%  82
50%  80
49%  7D
48%  7A
47%  78
46%  75
45%  73
44%  70
43%  6E
42%  6B
41%  69
40%  66
39%  63
38%  61
37%  5E
36%  5C
35%  59
34%  57
33%  54
32%  52
31%  4F
30%  4D
29%  4A
28%  47
27%  45
26%  42
25%  40
24%  3D
23%  3B
22%  38
21%  36
20%  33
19%  30
18%  2E
17%  2B
16%  29
15%  26
14%  24
13%  21
12%  1F
11%  1C
10%  1A
9%  17
8%  14
7%  12
6%  0F
5%  0D
4%  0A
3%  08
2%  05
1%  03
0%  00

Версия JavaScript ниже:


Вы также можете просто Google "число в гекс", где "число" является любое значение от 0 до 255.

Джаред Раммлер
источник
36

Android Материал Дизайн

Это преобразования для установки уровней непрозрачности цвета текста.

  • 100%: FF
  • 87%: DE
  • 70%: B3
  • 54%: 8А
  • 50%: 80
  • 38%: 61
  • 12%: 1F

Темный текст на светлом фоне

введите описание изображения здесь

  • Основной текст: DE000000
  • Вторичный текст: 8A000000
  • Отключенный текст, текст подсказки и значки: 61000000
  • Перегородки: 1F000000

Белый текст на темном фоне

введите описание изображения здесь

  • Основной текст: FFFFFFFF
  • Вторичный текст: B3FFFFFF
  • Отключенный текст, текст подсказки и значки: 80FFFFFF
  • Перегородки: 1FFFFFFF

Смотрите также

  • Посмотрите любой процент здесь .
Suragch
источник
Отличная работа, спасибо! По состоянию на 7 января 2019 года эти значения больше не отображаются на странице дизайна материалов Android, на которую вы ссылаетесь. Это все еще официальные рекомендуемые значения, и есть ли другой официальный источник, где они указаны? Спасибо!
TheUnwokenFool
@TheUnwokenFool, этот ответ может быть устаревшим. Я также ничего не вижу в настройке уровней непрозрачности для текста. Если есть какие-либо противоречия, следуйте действующим рекомендациям.
Сурагч
17

На Android цвета могут быть указаны как RGB или ARGB.

http://en.wikipedia.org/wiki/ARGB

В RGB у вас есть два символа для каждого цвета (красный, зеленый, синий), а в ARGB у вас есть два дополнительных символа для альфа-канала.

Итак, если у вас 8 символов, это ARGB, причем первые два символа указывают альфа-канал. Если вы удалите первые два символа, это будет только RGB (сплошные цвета, без альфа / прозрачности). Если вы хотите указать цвет в исходном коде Java, вы должны использовать:

int Color.argb (int alpha, int red, int green, int blue)

alpha  Alpha component [0..255] of the color
red    Red component [0..255] of the color
green  Green component [0..255] of the color
blue   Blue component [0..255] of the color

Ссылка: argb

алиби
источник
7

8-значное шестнадцатеричное значение цвета является представлением ARGB (альфа, красный, зеленый, синий), тогда как 6-значное значение предполагает непрозрачность 100% (полностью непрозрачный) и определяет только значения RGB. Таким образом, чтобы сделать это полностью непрозрачным, вы можете использовать либо # FF555555, либо просто # 555555. Каждое 2-значное шестнадцатеричное значение представляет собой один байт, представляющий значения от 0 до 255.

Кевин Коппок
источник
-1

в новой версии Chrome (возможно, 67.0.3396.62), шестнадцатеричный цвет CSS может использовать отображение этой модели,

например:

div{
  background-color:#FF00FFcc;
}

cc - непрозрачность, но старый хром не поддерживает этот мод

Heicks
источник
Добро пожаловать в StackOverflow, пожалуйста, посетите тур . Ваш ответ не помогает OP, поскольку он спросил о цветах в Android, а не в Chrome или HTML.
PeS
@PeS вчера, да, но они имеют одинаковое представление.
Хикс