导航号,我的单页导航
文章目录

前言

这篇文章介绍得不出,摘抄并整理于此,方便自己查阅。

正文

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:

  1. CLAMP :会将边缘的一个像素进行拉伸、扩展
  2. REPEAT:平移复制
  3. 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值,从左向右设置渐变色

[摘]Android颜色渐变之LinearGradient介绍

从左上角到右下角设置渐变色
mPaint.setShader(new LinearGradient(0, 0, mRectF.right, mRectF.bottom,
                mStartColor, mEndColor, Shader.TileMode.MIRROR));

忽略TileMode值,从左上角到右下角设置渐变色

[摘]Android颜色渐变之LinearGradient介绍

从上到下设置渐变色
mPaint.setShader(new LinearGradient(0, 0, 0, mRectF.bottom,
                mStartColor, mEndColor, Shader.TileMode.MIRROR));

忽略TileMode值,从上到下设置渐变色

[摘]Android颜色渐变之LinearGradient介绍

TileMode设置为MIRROR
mPaint.setShader(new LinearGradient(0, 0, mRectF.right/2, 0,
                mStartColor, mEndColor, Shader.TileMode.MIRROR));

TileMode设置为MIRROR,从左向右设置渐变色,x方向的终点为View的中间位置。(到终点后,反向线性化,。最后左右镜像对称)

[摘]Android颜色渐变之LinearGradient介绍

TileMode设置为REPEAT
mPaint.setShader(new LinearGradient(0, 0, mRectF.right/2, 0,
                mStartColor, mEndColor, Shader.TileMode.REPEAT));

TileMode设置为REPEAT,从左向右设置渐变色,x方向的终点为View的中间位置。(到终点后,重复复制了一个一样的)

[摘]Android颜色渐变之LinearGradient介绍

TileMode设置为CLAMP
mPaint.setShader(new LinearGradient(0, 0, mRectF.right/2, 0,
                mStartColor, mEndColor, Shader.TileMode.CLAMP));

[摘]Android颜色渐变之LinearGradient介绍

TileMode设置为CLAMP,从左向右设置渐变色,x方向的终点为View的中间位置。(到终点后,后面的以最后颜色继续延伸铺满)

参考文章

  1. 线性渐变LinearGradient使用总结_盛大人很低调的博客-CSDN博客_lineargradient

© 版权声明
导航号,我的单页导航

暂无评论

暂无评论...