Zrozumienie kolorów na Androidzie (sześć znaków)

212

Próbuję zrozumieć, jak działają kolory w Androidzie. Mam ten zestaw kolorów jako tło LinearLayouti otrzymuję szary kolor z pewną przezroczystością:

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

Jeśli usunę dwa ostatnie znaki (55), otrzymam jednolity kolor, tracąc przezroczystość. Próbowałem znaleźć stronę, na której mogę znaleźć wyjaśnienie na ten temat, ale nie mogłem go znaleźć.

Thiago
źródło

Odpowiedzi:

170

Jeśli podasz 6 cyfr szesnastkowych, oznacza to RGB (2 cyfry szesnastkowe dla każdej wartości czerwonej, zielonej i niebieskiej).

Jeśli podasz 8 cyfr szesnastkowych, będzie to ARGB (2 cyfry szesnastkowe dla każdej wartości odpowiednio alfy, czerwieni, zieleni i niebieskiego).

Więc usuwając ostatnie 55, zmieniasz z A = B4, R = 55, G = 55, B = 55 (przeważnie przeźroczysty szary), na R = B4, G = 55, B = 55 (całkowicie nie -przejrzysty ciemny róż).

Patrz „kolor” dokumentację dla obsługiwanych formatów.

Jon Skeet
źródło
A jak ustawić przejrzystość tekstu za pomocą kodu? Chcę przekonwertować wartość ARGB na int, aby móc później użyć jej w metodzie textView.setBackgroundColor (int color). Czy to możliwe? Jest jakiś inny sposób na osiągnięcie tego?
Marek
@Marek: Wartość ARGB jest int, skutecznie. Zobacz dokumenty na developer.android.com/reference/android/graphics/Color.html (znajdź <<na stronie).
Jon Skeet,
ale nie jest sformatowany jako #AARRGGBB. Następnie jest sformatowany jako 0xAARRGGBB. Dlatego nie mogłem go użyć w metodzie setBackgroundColor. Mógłbym użyć Color.parseColor ("# AARRGGBB)
Marek
@Marek: Nie jest „sformatowany” - to tylko liczba całkowita. Możesz łączyć różne bity zgodnie z listą w dokumentacji.
Jon Skeet,
1
@Toaster: Nie, przezroczystość.
Jon Skeet
1184

Android używa szesnastkowych wartości ARGB, które są sformatowane jako #AARRGGBB. Ta pierwsza para liter, AA, reprezentuje kanał alfa. Musisz przekonwertować dziesiętne wartości krycia na wartość szesnastkową. Oto kroki:

Proces wartości szesnastkowej alfa

  1. Weź swoją nieprzezroczystość jako wartość dziesiętną i pomnóż ją przez 255. Tak więc, jeśli masz blok, który jest w 50% nieprzezroczysty, wartość dziesiętna wynosiłaby .5. Na przykład: 0,5 x 255 = 127,5
  2. Ułamek nie zostanie przeliczony na szesnastkowy, więc musisz zaokrąglić liczbę w górę lub w dół do najbliższej liczby całkowitej. Na przykład: 127,5 zaokrągla w górę do 128; 55,25 zaokrągla w dół do 55.
  3. Wprowadź swoją wartość dziesiętną w konwerterze dziesiętnym na szesnastkowy, takim jak http://www.binaryhexconverter.com/decimal-to-hex-converter , i przekonwertuj swoje wartości.
  4. Jeśli odzyskasz tylko jedną wartość, poprzedź ją zerem. Na przykład, jeśli próbujesz uzyskać 5% krycia i przechodzisz przez ten proces, skończysz z wartością szesnastkową D. Dodaj zero przed nim, aby wyglądało jak 0D.

W ten sposób znajdujesz wartość kanału alfa. Pozwoliłem sobie przygotować dla ciebie listę wartości. Cieszyć się!

Wartości krycia szesnastkowego

  • 100% - FF
  • 95% - F2
  • 90% - E6
  • 85% - D9
  • 80% - CC
  • 75% - BF
  • 70% - B3
  • 65% - A6
  • 60% - 99
  • 55% - 8 ° C
  • 50% - 80
  • 45% - 73
  • 40% - 66
  • 35% - 59
  • 30% - 4D
  • 25% - 40
  • 20% - 33
  • 15% - 26
  • 10% - 1A
  • 5% - 0D
  • 0% - 00
BlondeFurious
źródło
37
Oparte na systemie Android Przewodnik po kolorach: google.com/design/spec/style/... Więcej kluczowych wartości krycia heksadecymalnego: 100%: FF 87%: DE 70%: B3 54%: 8A 30%: 4D 26%: 42 12 %: 1F
cn123h
tutaj znajdziesz wszystkie wartości: dtp-aus.com/hexadeci.htm i możesz dostać alfa 0-100 dzieląc liczbę przez 255 i
mnożąc
do 12% alfa: echo "obase=16; ibase=10; (255*12+50)/100" | bc. (+50 - dla zaokrąglenia do najbliższej wartości, faktycznie jest to 100/2)
czujność
195

Wychodząc od odpowiedzi @BlondeFurious , oto kod Java, aby uzyskać każdą wartość szesnastkową od 100% do 0% alfa:

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));
}

Wynik:

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

Wersja JavaScript jest poniżej:


Możesz także po prostu użyć „liczby na szesnastkę” Google, gdzie „liczba” to dowolna wartość z zakresu od 0 do 255.

Jared Rummler
źródło
36

Android Material Design

Są to konwersje służące do ustawiania poziomów krycia kolorów tekstu.

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

Ciemny tekst na jasnym tle

wprowadź opis zdjęcia tutaj

  • Tekst podstawowy: DE000000
  • Drugi tekst: 8A000000
  • Wyłączony tekst, tekst podpowiedzi i ikony: 61000000
  • Dzielniki: 1F000000

Biały tekst na ciemnym tle

wprowadź opis zdjęcia tutaj

  • Tekst podstawowy: FFFFFFFF
  • Drugi tekst: B3FFFFFF
  • Wyłączony tekst, tekst podpowiedzi i ikony: 80FFFFFF
  • Dzielniki: 1FFFFFFF

Zobacz też

  • Wyszukaj tutaj dowolny procent .
Suragch
źródło
Świetna robota, dzięki! Od 7 stycznia 2019 r. Wartości te nie są już widoczne na połączonej stronie Projektowanie materiałów na Androida. Czy nadal są to oficjalne zalecane wartości i czy istnieje inne oficjalne źródło, w którym są one podane? Dzięki!
TheUnwokenFool
@TheUnwokenFool, ta odpowiedź może być teraz nieaktualna. Nie widzę też nic w ustawianiu poziomów krycia tekstu. Jeśli wydaje się, że istnieją jakieś sprzeczności, przejdź do aktualnych wytycznych.
Suragch,
17

W systemie Android kolory można określić jako RGB lub ARGB.

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

W RGB masz dwa znaki dla każdego koloru (czerwony, zielony, niebieski), aw ARGB masz dwa dodatkowe znaki dla kanału alfa.

Tak więc, jeśli masz 8 znaków, jest to ARGB, a pierwsze dwa znaki określają kanał alfa. Jeśli usuniesz dwa pierwsze znaki, będzie to tylko RGB (jednolite kolory, brak alfa / przezroczystości). Jeśli chcesz określić kolor w kodzie źródłowym Java, musisz użyć:

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

Odniesienie: argb

alibi
źródło
7

8-cyfrowa wartość koloru heksadecymalnego reprezentuje ARGB (alfa, czerwony, zielony, niebieski), podczas gdy 6-cyfrowa wartość zakłada jedynie 100% nieprzezroczystości (całkowicie nieprzezroczysta) i określa tylko wartości RGB. Aby więc było całkowicie nieprzezroczyste, możesz użyć # FF555555 lub po prostu # 555555. Każda dwucyfrowa wartość szesnastkowa to jeden bajt, reprezentujący wartości od 0 do 255.

Kevin Coppock
źródło
-1

w nowej wersji chromowanej (może 67.0.3396.62), kolor heksadecymalny CSS może używać tego modelu wyświetlania,

na przykład:

div{
  background-color:#FF00FFcc;
}

CC jest nieprzezroczysty, ale stary Chrome nie obsługuje tego modu

Heicks
źródło
Zapraszamy do StackOverflow, odwiedź trasy . Twoja odpowiedź nie pomaga OP, ponieważ pytał o kolory w Androidzie, a nie o Chrome czy HTML.
PeS
@PeS wczoraj, tak, ale mają taką samą reprezentację.
Heicks