web-dev-qa-db-fra.com

Comment définir la valeur alpha / opacité sur la couleur sur le dessin XML?

J'ai besoin de définir une valeur d'opacité sur une couleur en XML dessinable. Mais quand j'essaie d'ajouter les deux valeurs d'opacité (# 20C0C0C0) par exemple, ne fonctionne pas. La couleur apparaît totalement transparente.

Voici mon code ...

  <?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>

Quelqu'un a une idée? Merci de votre aide.

35
Ricardo Graça

je peux être un peu en retard, mais si quelqu'un d'autre vient à ce poste et recherche des valeurs alpha. Jared Rummler a fait le travail et nous fournit toutes les valeurs possibles https://stackoverflow.com/a/27813407/5973229

Il utilise donc cette méthode pour calculer chaque valeur d'opacité dans le code 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));

Et voici le résultat:

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
83
Bernard Covic

La couleur "apparaît" totalement transparente b/c elle est presque totalement transparente. Les couleurs hexadécimales sont normalement de 6 chiffres #RRGGBB mais si vous souhaitez définir l'opacité, vous passez en 2 chiffres sur une échelle hexadécimale (base-16) au début, donc dans votre cas # 20C0C0C0 votre opacité est de 20 (en base-16) .

Voici quelques valeurs alpha décimales typiques mappées à des valeurs hexadécimales

  • 0 -> 0 (c'est complètement transparent)
  • 32 -> 20 (c'est votre opacité)
  • 255 -> FF (c'est complètement opaque)

Votre opacité n'est donc que de ~ 12%.

Si vous souhaitez qu'il soit plus opaque (moins transparent), utilisez un nombre plus élevé (7F vous donnera environ 50% d'opacité)

Alors:

<solid Android:color="#7FC0C0C0" />
73
Cumulo Nimbus

Donner une réponse mise à jour pour quand les gens voient cela, après 2018. Autant que je l'ai vu, lors du développement pour les versions d'API> Lollipop, il n'est pas nécessaire d'utiliser des valeurs hexadécimales pour alpha. J'ai vérifié cela hier et j'ai également été surpris par cela.

Dans les schémas de couleurs Android, nous utilisons des valeurs hexadécimales comme dans #FFFFFF pour la couleur blanche. Cela représente les canaux RVB dans ladite couleur. En d'autres termes, comme mentionné par @Cumulo Nimbus ci-dessus, #RRGGBB.

Pour l'opacité/la transparence, vous devez également inclure le canal alpha, ce qui donnerait #AARRGGBB. En décimal/déni (base 10), les canaux R, G, B vont chacun de 0 à 255 tandis que le canal alpha va de 0 à 100, donc si je voulais utiliser l'échantillon de couleur que vous avez fourni avec une opacité de 50%, tout ce dont j'ai besoin faire est quelque chose comme:

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

où 50 est le pourcentage d'opacité dont vous avez besoin. Pour une option entièrement opaque, c'est-à-dire une opacité de 100%, vous n'avez pas besoin d'utiliser # FFC0C0C0 ou # 100C0C0C0 (Remarque: cela ne montrerait rien). Laissez-le simplement à la place # C0C0C0.

2
Seni Joshua