今天UI根据需求设计一张图,其中有一个知识点是给某个控件的背景颜色设置不透明度为10%,至于设置透明度以前也写过,知识点很简单,不过以前用的都是套人家写的方式,也不知所以然,具体逻辑不是很清晰,今天晚上回来总结一下:
例如:现在有个需求:设置LinearLayout背景颜色为#4ab9ff,透明度为10%
方式一:直接在xml中设置
我们可能有时会发现Android的十六进制代码有时为6位,有时为8位,这两种表达方式有区别吗? 有,我们通常用的都是6位,也称RGB模式,RGB分别代表红色,绿色,蓝色,也称三基色,这三种颜色每一种颜色都可以用一个十六进制说明每个颜色的范围是00–FF,所有正常是6位,而8位呢?前两位代表透明度,也是按照十六进制表示,范围同样是00-FF(10进制为0-255),后六位表示颜色,仍然是RGB模式,通常前两位不写,默认代表不透明为FF,那么问题来了,10%的透明度用16进制应该怎么表示:

  1. 10%转换成10进制
    10%*255=25.5(四舍五入26)
  2. 26转化为16进制
    26----1A(上1与余10,哈哈,这个不讲了,大家都会)

此时我们得到了10%的透明度十六进制,为1A,和刚才需求给我们的背景颜色组合,组成8位的十六进制代码为#1A4ab9ff,在xml里面设置就行了(总结当颜色需要透明度,我们需要拼一个8位的十六进制代码,前两位代表透明度),所以我们要那么此时我们这个需求可以这样写:

<LinearLayout
        android:id="@+id/ll_background"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:background="#4ab9ff"
        android:orientation="vertical"
      >
    </LinearLayout>

此时,有的同学问了,难道每次需要颜色的透明度都要算吗?不用,上一个我是算给大家看看由来,下面是一个透明度和十六进制转换表,需要自取:
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.拿到要设置控件的Id
LinearLayout mLlBackground=findViewById(R.id.ll_background);
2.设置背景透明度
mLlBackground.getBackground().setAlpha(25);//因为我们要的10% 这个参数范围为0-255,由于从0开始,所以取值为25。
注意:使用getBackground().setAlpha()这个方法的前提必须设置的那个控件要设置背景颜色,不然会报错, 会什么会报错呢,因为这句话作用就是设置背景颜色透明度,你都没有颜色了,如何设置透明度呢。

如有错误之处,希望大家及时指出,共同进步!