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

Android  摘抄  2023年2月27日 pm6:35发布2年前 (2023)更新 91es.com站长
131 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

王小波:用一生来学习艺术

我念过文科,也念过理科。在课堂上听老师提到艺术这个词,还是理科的老师次数更多:化学老师说,做实验有实验艺术;计算机老师说,编程序有编程艺术。老师们说,怎么做对是科学,怎么做好则是艺术;前者有判断真伪的法则,后者则没有;艺术的真谛就是要叫人感到好,甚至是完美无缺;传授科学知识就是告诉你这些法则,而艺术...

Android Studio的Gradle下载慢

前言新建或者导入Android Studio工程,由于各种原因,Gradle下载慢或者更本无法下载,因此需要替换为国内的代理。记录于此,方便自己查阅。正文解决方法:使用阿里仓库服务替换,更多内容可以访问这个:https://maven.aliyun.com/mvn/view具体操作:...

朱光潜:有趣的灵魂都有静气

人生乐趣一半得之于活动,也还有一半得之于感受。所谓“感受”是被动的,是容许自然界事物感动我的感官和心灵。这两个字涵义极广。眼见颜色,耳闻声音,是感受;见颜色而知其美,闻声音而知其和,也是感受。同一美颜,同一和声,而各个人所见到的美与和的程度又随天资境遇而不同。比方路边有一棵苍松,你看见它只觉得可...

ViewPager的简单使用

前言ViewPager是Android中比较常见的控件,用处很大,比如广告循环播放,图片播放等都会考虑用这个。一直在用,但没有单独写一下,因此今天抽空记录一下,方便自己查阅。正文ViewPager还有一个升级版本ViewPager2,用法也差不多,但这里只介绍ViewPager的使用。个...

解决java.io.File android.content.Context.getDatabasePath(java.lang.String)

前言首先,这个问题有点神奇。比如,出现问题的原因:new.SQLiteOpenHelper()时,Context不能是Application的Context如果传入Application,会java.io.File android.content.Context.getDatabasePat...

丰子恺:秋

我的年岁上冠用了“三十”二字,至今已两年了。不解达观的我,从这两个字上受到了不少的暗示与影响。虽然明明觉得自己的体格与精力比二十九岁时全然没有什么差异,但“三十”这一个观念笼在头上,犹之张了一顶阳伞,使我的全身蒙了一个暗淡色的阴影,又仿佛在日历上撕过了立秋的一页以后,虽然太阳的炎威依然没有减却,寒暑...