2013-05-17 17 views
22

Muszę ustawić wartość krycia na kolor w formacie losowym xml. Ale kiedy próbuję dodać na przykład dwie wartości nieprzezroczystości (# 20C0C0C0), nie działają. Kolor wydaje się być całkowicie przezroczysty.W jaki sposób ustawić wartość alfa/nieprzezroczystości na kolor w przypadku rysowania xml?

Oto mój kod ...

<?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <corners 
     android:radius="2dp" /> 
    <solid 
     android:color="#CDCDCD" /> 
    <stroke 
     android:width="2dp" 
     android:color="@android:color/darker_gray" /> 
    <size 
     android:height="60dp" 
     android:width="80dp"/> 
    </shape> 

Ktoś ma pomysł? Dzięki za pomoc.

+1

CDCDCD z tym masz nieprzezroczysty kolor. Pierwsze dwa bajty to kanał alfa. FF jest maksimum alfa 00 jest minimum. # 00CDCDCD jest całkowicie przezroczystym kolorem. – Blackbelt

+2

Nie ma ustawienia alfa dla [Shape Drawables] (http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape). – TronicZomB

Odpowiedz

54

Kolor "pojawia się" jako całkowicie przezroczysty b/c jest niemal całkowicie przezroczysty. Kolory szesnastkowe mają zwykle 6 cyfr #RRGGBB, ale jeśli chcesz ustawić krycie, które przekażemy na początku 2 cyfry, to w twoim przypadku # 20C0C0C0 Twoja krycie wynosi 20.

W skali szesnastkowej (podstawa 16) :

  • Baza 16 | Baza 10
  • 0 | 0 (jest całkowicie przezroczysty)
  • 20 | 32 (to jest twoja nieprzezroczystość)
  • FF | 255 (to jest całkowicie nieprzezroczyste)

Twoje krycie to tylko ~ 12%.

Jeśli chcesz go być bardziej nieprzejrzysty (mniej przezroczysty) zastosować większą liczbę (7F daje około 50% krycie)

Więc:

<solid android:color="#7FC0C0C0" /> 
48

może być trochę późno , ale jeśli ktoś przychodzi do tego postu i szuka wartości alfa. Jared Rummler zrobił pracę i provids nas z każdej wartości posibile https://stackoverflow.com/a/27813407/5973229

Więc używa tej metody do obliczania wszelkich wartość krycia w kodzie hex:

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

I wtedy jest to 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 
+1

dzięki, rozwiązał mój problm – murli

+2

Dzięki za stół heksagonalny <3 –

0

Udzielając zaktualizowanej odpowiedzi na pytanie, kiedy ludzie to zobaczą, po 2018 roku. O ile widziałem, przy opracowywaniu wersji API> Lollipop, nie trzeba używać wartości szesnastkowych dla alfa. Sprawdziłem to wczoraj i byłem tym zaskoczony.

W schematach kolorów na Androida używamy wartości Hex jak w #FFFFFF dla koloru białego. To reprezentuje kanały RGB we wspomnianym kolorze. Innymi słowy, jak wspomniano powyżej @ Cumulo Nimbus, #RRGGBB.

Dla krycia/przezroczystości, należy również uwzględnić kanał alfa, który dałby #AARRGGBB. Dziesiętnie/denary (podstawa 10), kanały R, G, B każdy zakres od 0-255, podczas gdy kanał alfa jest w zakresie od 0-100, więc jeśli chcę użyć próbki koloru o 50% nieprzezroczystości, Wszystko, co muszę to jest coś takiego:

<solid android:color="#50C0C0C0"/> 

gdzie 50 oznacza procent nieprzezroczystości, którego potrzebujesz. W przypadku całkowicie nieprzezroczystej opcji, tj. 100% krycia, nie trzeba używać # FFC0C0C0 lub # 100C0C0C0 (uwaga: nic by to nie pokazało). Po prostu zostaw zamiast tego # C0C0C0.