目录
前言
这篇文章介绍得不出,摘抄并整理于此,方便自己查阅。
正文
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的中间位置。(到终点后,后面的以最后颜色继续延伸铺满)
参考文章
暂无评论...
随机推荐
王小波:用一生来学习艺术
我念过文科,也念过理科。在课堂上听老师提到艺术这个词,还是理科的老师次数更多:化学老师说,做实验有实验艺术;计算机老师说,编程序有编程艺术。老师们说,怎么做对是科学,怎么做好则是艺术;前者有判断真伪的法则,后者则没有;艺术的真谛就是要叫人感到好,甚至是完美无缺;传授科学知识就是告诉你这些法则,而艺术...
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...
丰子恺:秋
我的年岁上冠用了“三十”二字,至今已两年了。不解达观的我,从这两个字上受到了不少的暗示与影响。虽然明明觉得自己的体格与精力比二十九岁时全然没有什么差异,但“三十”这一个观念笼在头上,犹之张了一顶阳伞,使我的全身蒙了一个暗淡色的阴影,又仿佛在日历上撕过了立秋的一页以后,虽然太阳的炎威依然没有减却,寒暑...