Android中使用gradient的一条建议
2017-02-02 本文已影响1428人
wutongke
建议
使用xml定义一个gradient实现透明渐变时,要小心使用@android:color/transparent
解析
在绘制gradient时,android的framework使用两种颜色来代表gradient section的两个边缘(startColor - centerColor 、 centerColor - endColor、 startColor- endColor ),然后根据两个值计算插值绘制其余部分。
在计算插值时,framework实际时分别计算了颜色的四个分量(透明度Alpha、红Red、绿色Green、蓝色Blue),然后再组合起来的。
这里是一个例子:

如果变化是三步:

色值的四个分量的变化如下:

如果使用了@android:color/transparent
,我们知道它代表全透明,但是在计算插值时,除了透明度,还有计算R、G、B,我们看一下android.graphics
中Color.Transparent
的值:

所以其值实际为#000000
。
举个例子

其变化是:

看着很奇怪,我们看下四个分量的变化过程:

到这里久就很容易理解了,我们正确的使用方式应该是:



这样R、G、B值不变化,只用透明度变化了。
这是一篇译文,原文地址:https://android.jlelse.eu/android-dev-tip-3-99da754151ad#.ajx7ebote
欢迎关注公众号wutongke,每天推送移动开发前沿技术文章:
