
通过 LinearGradient 可以实现线性渐变效果。
7.5.1 概述
1. 构造函数
第一个构造函数:
- (x0,y0) :起始渐变点坐标;(x1,y1) :结束渐变点坐标。
- color0:起始颜色;color1:终止颜色。颜色值必须使用 0xAARRGGBB 形式的 16 进制表示,表示透明度的 AA 一定不能少。
- TileMode tile:与 BitmapShader 一样,用于指定控件区域大于指定的渐变区域时,空白区域的颜色填充方法。
第二个构造函数:
- colors[]:用于指定渐变的颜色值数组。同样,颜色值必须使用 0xAARRGGBB 形式的 16 进制表示,表示透明度的 AA 一定不能少。
- positions[]:与渐变的颜色相对应,取值是 0-1 的 float 类型,表示在每一个颜色在整条渐变线中的百分比位置
2. 双色渐变使用示例
自定义一个从左到右的双色渐变控件,代码如下。

3. 多色渐变使用示例
在上面示例的基础上,使用多色渐变来构造 LinearGradient 实例。
效果如下图所示。

从这里可以看出,渐变的开始点同样是控件左边中点,渐变的结束点也同样是控件右边中点;这里我们指定了五种渐变颜色,而且指定了每个颜色的位置,前四种颜色是按 20% 均匀分布的,最后两种颜色相距 40%;最后通过 canvas.drawRect() 函数把整个控件区域画出来。
注意:colors 和 pos 的个数一定要相等,也就是说必须指定每一个颜色值的位置。如果元素个数不相等,则会直接报错,如下图所示。

4. TileMode 填充模式
从构造函数中可以看出,LiearGradient 只有一个 TileMode 参数,这说明 X 轴与 Y 轴共用这一个 TileMode 填充参数,而不能像 BitmapShader 那样分别指定 X 轴与 Y 轴的填充参数。
示例:分别指定不同的填充模式

|
|
5. Shader 填充与显示区域
所有 Shader 都是一样的:Shader 的布局和显示是分离的;Shader 总是从控件的左上角开始布局的;如果单张图片无法覆盖整个控件,则会使用 TileMode 重复模式来填充空白区域;而 canvas.draw 系列函数则只表示哪部分区域被显示出来。
下面利用 drawText() 函数实现一个渐变文字效果。

|
|
7.5.2 示例:闪光文字效果

|
|
在 res/layout/act_main.xml
控件派生自 TextView 的子类,所以可以使用 TextView 的自带方法 getCurrentTextColor() 来获取文字颜色、画笔、文字长度等;利用 Shader.setLocalMatrix(Matrix localM) 设置逐渐平移的矩阵,最后用 ValueAnimator 来控制矩阵平移的位移 mDx,移动距离是从 0 到两倍的 text 距离。
