簡評:TL;DR: 如果要實現某個顏色到透明的漸變時,記得不要改動顏色的 RGB 值。
Tip: 如果你想要建立從某個顏色到透明的漸變(gradient)背景,那就要小心使用 @android:color/transparent 了。
因為當 Android 在繪製漸變(gradient)時,需要指定兩種顏色代表漸變部分的兩邊(startColor – centerColor, centerColor – endColor, startColor – endColor)。
Android 將會計算顏色的四個組成部分(A, R, G, B)的差值。比如,我們想實現下面兩個顏色的漸變:

在漸變過程的特定階段的顏色值,可以表示為:

當使用 @android:color/transparent 時,要記住雖然其看起來確實是透明的(即 A = #00),但也有自己的 RGB 值。如果你看過 android.graphics 中的 Color 類,你會發現 Color.TRANSPARENT 等於 0(#00000000)也就是一個完全透明的黑色。

下面來看一個例子,我們定義如下的一個 gradient:

其顯示效果是這樣的:

是不是感覺怪怪的。因為我們其實是將一個 #FF27AE60 的綠色漸變到了一個完全透明的黑色。

因此「當我們要實現某個顏色到透明的漸變時,不要改動顏色的 RGB 值」。
因此,上面的例子應該改成這樣(只變動 Alpha 值):

顯示效果:


知乎專欄:極光日報
原文連結:Android Dev Tip #3
極光日報,極光開發者 的 Side Project,每天導讀三篇國外技術類文章,歡迎投稿和關注。