Android 颜色值透明度的计算

在开发中,UI 给的设计图中通常会标注6 位的颜色值(比如#FF0000),还会标注透明度(30%),这怎样得到 Android 中8 位的颜色值呢?

1. 简介

Android 中的颜色值遵循的是 RGB/ARGB 标准,使用时以#开头,用 16 进制来表示。

ARGB 是四个单词首字母的缩写,分别是 Alpha(透明度)、Red(红色)、Green(绿色)、Blue(蓝色)。

透明度的范围从 0 - 255,通常用 16 进制表示为 00 - FF,0(对应 16 进制 00) 是全透明,255(对应 16 进制 FF)是不透明。

透明度和不透明度是两个相对的概念,如果一个颜色值是 30%的透明度、那么它的不透明度就是 70%。需要注意的是,ARGB 中A 表示的是不透明度。

2. 换算

介绍完概念,再来看看如何换算,比如我们拿到这样一张设计稿:

其中顶部有一个明显的渐变遮罩效果,UI 给出的颜色值是 #000000,透明度 55%。换算过程:

    1. ARGB 中的 A 表示不透明度,第一步将透明度转换为不透明度(不透明度 = 100% - 透明度),示例中的不透明度是 45%。
    1. 将不透明度乘以 255,示例中 45% * 255 = 115 (向上取整)
    1. 将计算的结果转化为 16 进制,115 的 16 进制表示为 0x73
    1. 将不透明度和 6 位的颜色值拼接为 ARGB 的格式,得到颜色值:#73000000

示例中设计稿顶部遮罩最后的实现,可以给标题加一个如下的背景:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="270"
android:dither="true"
android:endColor="#00000000"
android:startColor="#73000000" />
</shape>

3. 透明度 16 进制对照表

为了方便查阅,可以直接对照下表,找到对应透明度的 16 进制表示。比如示例中的 55%透明度,直接查表就可以得到 16 进制的表示为 73,最终颜色值为 #73000000。

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

注:

  • 100% 透明度表示完全透明,不透明度为 0,对应16 进制的 00;
  • 0%透明度表示完全不透明,不透明度为 100%,对应 16 进制的 FF;

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×