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

Android  摘抄  2023年2月27日 pm6:35发布2年前 (2023)更新 城堡大人
168 0 0

前言

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

正文

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

版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android存储单位转换

G M K B 单位之间转换,直接上代码 // storage, G M K B public static String convertStorage(long size) { long kb = 1024; long mb = kb <...

叶芝 :当你老了(冰心版)

当你老了头发花白睡意沉沉倦坐在炉边取下这本书来慢慢读着追梦当年的眼神那柔美的神采与深幽的晕影多少人爱过你青春的片影爱过你的美貌以虚伪或是真情惟独一人爱你那朝圣者的心爱你哀戚的脸上岁月的留痕在炉栅边你弯下了腰低语着带着浅浅的伤感爱情是怎样逝去又怎样步上群山怎样在繁...

adb 重启Android framework

前言Android调试时,有序需要修改系统的属性。使用adb shell setprop xxxx 后,重启机器后就恢复了。然后实际中,有些属性如果没重启,会遇到属性值在代码中不生效,重启后,属性值又还原的问题。比如SurfaceView的一个日志打印DEBUG开关,通过adb改变debug...

TextView设置倾斜右边显示不全

直接上布局代码 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@an...

apache开启gzip压缩

我的买的是阿里云的服务器,或许不同服务商的路径不同,所以我的路径仅供参考。/alidata/server/httpd/conf/httpd.confA.开启模块:LoadModule deflate_module modules/mod_deflate.soLoadModule h...

Lambda编程简介

前言简单记录一下Lambda编程相关知识,方便自己查阅和学习。这里重点是理解lambda作为函数参数的使用。正文Lambda表达式Lambda表达式就是一个匿名函数,它是函数式编程的基础,所谓函数式编程实际上就是一种编程范式,即如何编写程序的方法论。函数式编程的思想是将计算机运算视为函数...