Android中的自绘View的那些事儿(三)之 颜色渐变渲染器:LinearGradient、RadialGradient 和 SweepGradient的简介
来源:互联网 发布:网络攻击与防范论文 编辑:程序博客网 时间:2024/05/16 07:46
我们在上一篇文章《Android中的自绘View的那些事儿(二)之 Shader渲染器和BitmapShader位图渲染器的简介》介绍了渲染器基类Shader以及它五个子类中的BitmapShader位图渲染器的使用,今天我们继续来谈谈LinearGradient线性渲染器、RadialGradient环形渲染器和 SweepGradient梯度渲染器这三个颜色渐变渲染器
LinearGradient线性渲染器
LinearGradient就是创建一个沿着直线绘制线性渐变的渲染器。我们来看看它的构造函数:
LinearGradient (float x0, // 颜色渐变的起点X轴坐标 float y0, // 颜色渐变的起点Y轴坐标 float x1, // 颜色渐变的终点X轴坐标 float y1, // 颜色渐变的终点Y轴坐标 int[] colors, // 渐变分布的颜色数组,即是渐变从始点到终点的颜色过渡数组,数组长度不限,但决不能为空 float[] positions, //渐变分布的颜色数组对应的位置,取值范围是[0-1]的浮点值数组,数组长度要和colors保持一致,也可为空,若为空,则表示颜色均匀分布 Shader.TileMode tile) // 渲染平铺模式
示例:
public class MyView extends View { public MyView(Context context) { this(context, null, 0); } public MyView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = 500; int[] colors = { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; float[] positions = { 0f, 0.5f, 0.8f, 1f }; LinearGradient linearGradient = new LinearGradient(0, 0, width, 0, colors,positions, Shader.TileMode.CLAMP); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setShader(linearGradient); canvas.drawRect(0, 0, width, height, paint); }}
上面代码中,定义了一个LinearGradient,前面4个参数指定颜色渐变的两个坐标,第5个参数是一个颜色数组,这里是红、绿、蓝以及黄,第6个参数是颜色分布的比例
运行效果:
RadialGradient环形渲染器
RadialGradient就是创建一个渲染中心和半径的径向渐变的渲染器。我们来看看它的构造函数:
RadialGradient (float centerX, // 圆心的X坐标 float centerY, // 圆心的Y坐标 float radius, // 圆的半径 int[] colors, // 渐变分布的颜色数组(跟前面介绍LinearGradient的colors一样) float[] stops, // 渐变分布的颜色数组对应的位置(跟前面介绍LinearGradient的positions参数一样) Shader.TileMode tileMode) // 渲染平铺模式
示例:
public class MyView extends View { public MyView(Context context) { this(context, null, 0); } public MyView(Context context, AttributeSetattrs) { this(context, attrs, 0); } public MyView(Context context, AttributeSetattrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); int radius = 200; int[] colors = { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; float[] positions = { 0f, 0.9f, 0.95f, 1f }; Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); RadialGradient radialGradientA = new RadialGradient(width / 2, height / 4, radius,colors, positions, Shader.TileMode.CLAMP); paint.setShader(radialGradientA); canvas.drawCircle(width / 2, height / 4, radius,paint); RadialGradient radialGradientB = new RadialGradient(width / 2, height / 4 * 3 + 50, radius, colors, positions,Shader.TileMode.CLAMP); paint.setShader(radialGradientB); canvas.drawCircle(width / 2, height / 4 * 3, radius, paint); }}
上面代码中,定义了两个RadialGradient,其中RadialGradientA指定的圆心坐标和半径都跟绘出的圆保持一致,而RadialGradientB则在半径上加了50像素
运行效果:
SweepGradient梯度渲染器
SweepGradient就是在中心点绘制扫描梯度的渲染器。我们来看看它的构造函数:
SweepGradient (float cx, // 圆心的X坐标 float cy, // 圆心的Y坐标 int[] colors, // 渐变分布的颜色数组(跟前面介绍LinearGradient的colors一样) float[] positions) // 渐变分布的颜色数组对应的位置(跟前面介绍LinearGradient的positions参数一样)
示例
public class MyView extends View { public MyView(Context context) { this(context, null, 0); } public MyView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); int radius = 200; int[] colors = { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}; float[] positions = { 0f, 0.9f, 0.95f, 1f }; Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); SweepGradient sweepGradient = new SweepGradient(width / 2, height / 2, colors, positions); paint.setShader(sweepGradient); canvas.drawCircle(width / 2, height / 2, radius, paint); }}
上面代码中,定义了一个SweepGradient,参数都很简单,分别是跟绘制保持一至的圆心还有颜色数组和颜色分布数组
运行效果:
阅读全文
0 0
- Android中的自绘View的那些事儿(三)之 颜色渐变渲染器:LinearGradient、RadialGradient 和 SweepGradient的简介
- Android 渐变 LinearGradient RadialGradient SweepGradient
- Android中的自绘View的那些事儿(二)之 Shader渲染器和BitmapShader位图渲染器的简介
- Android中的自绘View的那些事儿(四)之 ComposeShader组合渲染器的简介
- Android中的自绘View的那些事儿(五)之 遮罩滤镜:BlurMaskFilter 和 EmbossMaskFilter 的简介
- Android中的自绘View的那些事儿(一)
- Android中的自绘View的那些事儿(六)之 画布裁剪
- SVG 渐变(linearGradient、radialGradient)
- Android渲染器Shader:环状放射渐变渲染器RadialGradient(三)
- shader渲染器(BitmapShader 、LinearGradient 、RadialGradient )简单介绍
- Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)
- 渐变的那些事儿
- Android 颜色渲染(六) RadialGradient 环形渲染
- Android 颜色渲染(六) RadialGradient 环形渲染
- Android 颜色渲染(六) RadialGradient 环形渲染
- Android 颜色渲染(五) LinearGradient线性渲染
- Android 颜色渲染(五) LinearGradient线性渲染
- Android 颜色渲染(五) LinearGradient线性渲染
- Java基础知识总结(二)
- SSH_Hibernate分页问题
- 区别:面对过程&面对对象
- MikTeX TeXStudio
- C++日期 时间
- Android中的自绘View的那些事儿(三)之 颜色渐变渲染器:LinearGradient、RadialGradient 和 SweepGradient的简介
- yolo学习笔记(2)
- SGU
- Mqtt之连接确认消息ConnAck
- Android 4.4.2开机动画支持系统语言切换
- 重复引用jar包问题和降低编译版本问题总结
- iOS xcode ~pilst(配置)
- 掌柜大作战(23):京东Me,移动办公,应有尽有
- 拥塞控制分析之DCTCP