Розуміння кольорів на 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 - це int, ефективно. Дивіться документи на developer.android.com/reference/android/graphics/Color.html (знайдіть <<на сторінці).
— Джон Скіт

але він не сформований як #AARRGGBB. Потім вона формується як 0xAARRGGBB. Ось чому я не міг використовувати його в методі setBackgroundColor. Я міг би використовувати Color.parseColor ("# AARRGGBB)
— Marek

@Marek: Це не "відформатовано" - це лише ціле число. Ви можете комбінувати різні біти, як зазначено в документації.
— Джон Скіт

1
@Toaster: Ні, прозорість.
— Джон Скіт

1184

Android використовує шістнадцяткові значення ARGB, відформатовані як #AARRGGBB. Перша пара букв, AA, являє собою альфа-канал. Ви повинні перетворити десяткові значення непрозорості у шістнадцяткове значення. Ось такі кроки:

Процес значень альфа-шестигранника

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

Ось як ви знаєте значення альфа-каналу. Я взяв на себе сміливість скласти список цінностей для вас. Насолоджуйтесь!

Шістнадцяткові значення непрозорості

  • 100% - ФФ
  • 95% - F2
  • 90% - Е6
  • 85% - D9
  • 80% - КК
  • 75% - BF
  • 70% - B3
  • 65% - А6
  • 60% - 99
  • 55% - 8С
  • 50% - 80
  • 45% - 73
  • 40% - 66
  • 35% - 59
  • 30% - 4D
  • 25% - 40
  • 20% - 33
  • 15% - 26
  • 10% - 1А
  • 5% - 0D
  • 0% - 00

37
Основа на посібнику з дизайну кольорів Android Матеріал: google.com/design/spec/style/… Більше ключових значень непрозорості: 100%: 87% FF: 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)
— пильнування

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%: ФФ
  • 87%: DE
  • 70%: B3
  • 54%: 8А
  • 50%: 80
  • 38%: 61
  • 12%: 1F

Темний текст на світлому фоні

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

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

Білий текст на темному тлі

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

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

Дивитися також

  • Знайдіть будь-який відсоток тут .

Чудова робота, дякую! З 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

Довідка: аргб


7

8-розрядне шістнадцяткове значення кольору є поданням ARGB (Альфа, Червоний, Зелений, Синій), тоді як 6-розрядне значення просто передбачає 100% непрозорість (повністю непрозоре) та визначає лише значення RGB. Отже, щоб зробити це непрозорим, ви можете використовувати # FF555555, або просто # 555555. Кожне двозначне шістнадцяткове значення - один байт, що представляє значення від 0-255.


-1

у новій хромованій версії (можливо 67.0.3396.62) шестигранний колір CSS може використовувати цей дисплей моделі,

наприклад:

div{
  background-color:#FF00FFcc;
}

cc - непрозорість, але старий хром не підтримує цей мод


Ласкаво просимо до StackOverflow, відвідайте тур . Ваша відповідь не допомагає ОП, оскільки він запитав про кольори в Android, а не в Chrome чи HTML.
— PeS

@PeS вчора, так, але вони мають однакове представництво.
— Хейкс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.