目录
前言
这篇文章介绍得不出,摘抄并整理于此,方便自己查阅。
正文
Android 支持三种颜色渐变, LinearGradient(线性渐变)、 RadialGradient (放射渐变)、 SweepGradient(扫描渐变)。
这三种渐变均继承自android.graphics.Shader, 可以通过Paint 类setShader()方法来使用。
这里主要介绍LinearGradient,这个项目中比较常用。
构造方法1
只支持两种颜色的渐变。
/**
* @param x0 x0表示渐变色起始点x轴坐标
* @param y0 y0表示渐变色起始点y轴坐标
* @param x1 x1表示渐变色终点x轴坐标
* @param y1 y1表示渐变色终点y轴坐标
* @param color0 color0表示渐变色开始的颜色,颜色值要用16进制表示
* @param color1 color1表示渐变色结束的颜色,颜色值要用16进制表示
* @param tile tileMode用于指定控件区域大于指定的渐变区域时,剩余区域的颜色填充方法
*/
public LinearGradient(float x0, float y0, float x1, float y1,
@ColorInt int color0, @ColorInt int color1,
@NonNull TileMode tile) {
//略
}
TileMode 有3种方式可供选择,分别为CLAMP、REPEAT和MIRROR:
- CLAMP :会将边缘的一个像素进行拉伸、扩展
- REPEAT:平移复制
- MIRROR:镜面翻转
构造方法2
/**
* @param x0 x0表示渐变色起始点x轴坐标
* @param y0 y0表示渐变色起始点y轴坐标
* @param x1 x1表示渐变色终点x轴坐标
* @param y1 y1表示渐变色终点y轴坐标
* @param colors 为渐变的颜色值数组,颜色值要用16进制表示
* @param positions 为colors[]内多种颜色平铺渐变时每种颜色的比例位置,取值范围为:0~1
* @param tile tileMode用于指定控件区域大于指定的渐变区域时,剩余区域的颜色填充方法
*
*/
public LinearGradient(float x0, float y0, float x1, float y1, @NonNull @ColorLong long[] colors,
@Nullable float[] positions, @NonNull TileMode tile) {
//略
}
举例说明
从左向右设置渐变色
mPaint.setShader(new LinearGradient(0, 0, mRectF.right, 0,
mStartColor, mEndColor, Shader.TileMode.MIRROR));
忽略TileMode值,从左向右设置渐变色
从左上角到右下角设置渐变色
mPaint.setShader(new LinearGradient(0, 0, mRectF.right, mRectF.bottom,
mStartColor, mEndColor, Shader.TileMode.MIRROR));
忽略TileMode值,从左上角到右下角设置渐变色
从上到下设置渐变色
mPaint.setShader(new LinearGradient(0, 0, 0, mRectF.bottom,
mStartColor, mEndColor, Shader.TileMode.MIRROR));
忽略TileMode值,从上到下设置渐变色
TileMode设置为MIRROR
mPaint.setShader(new LinearGradient(0, 0, mRectF.right/2, 0,
mStartColor, mEndColor, Shader.TileMode.MIRROR));
TileMode设置为MIRROR,从左向右设置渐变色,x方向的终点为View的中间位置。(到终点后,反向线性化,。最后左右镜像对称)
TileMode设置为REPEAT
mPaint.setShader(new LinearGradient(0, 0, mRectF.right/2, 0,
mStartColor, mEndColor, Shader.TileMode.REPEAT));
TileMode设置为REPEAT,从左向右设置渐变色,x方向的终点为View的中间位置。(到终点后,重复复制了一个一样的)
TileMode设置为CLAMP
mPaint.setShader(new LinearGradient(0, 0, mRectF.right/2, 0,
mStartColor, mEndColor, Shader.TileMode.CLAMP));
TileMode设置为CLAMP,从左向右设置渐变色,x方向的终点为View的中间位置。(到终点后,后面的以最后颜色继续延伸铺满)
参考文章
© 版权声明