前言
我们如果由于需求,需要在自定义控件之中,绘制带有光晕效果的图。
例如下面的效果:
我们该如何绘制?
方法
采用RadialGradient(环性着色器) 属性,给画笔设置绘制效果。
类似的还有LinearGradient(线性着色器)。
例子代码:
Paint paint =new Paint();
Paint.setShader(new RadialGradient(1920,1080, 20,
Color.WHITE, Color.TRANSPARENT, Shader.TileMode.REPEAT));
canvas.drawCircle(1920,1080,20,currPaint);
上面的代码就可以在1920*1080坐标的位置,绘制一个环形为20的正圆然后
颜色效果就如同上图所示的结果。
下面介绍下参数意义:
centerX: 渐变中心点X坐标
centerY: 渐变中心点Y坐标
radius: 渐变半径
centerColor: 渐变的起始颜色,即渐变中心点的颜色,取值类型必须是八位的0xAARRGGBB色值!透明底Alpha值不能省略,不然不会显示出颜色。
edgeColor:渐变结束时的颜色,即渐变圆边缘的颜色,同样,取值类型必须是八位的0xAARRGGBB色值!
TileMode: 用于指定当控件区域大于指定的渐变区域时,空白区域的颜色填充方式。
如果需要绘制多色圆环渐变。那么渐变开始颜色,和结束颜色 这两个值就需要传递的是数组了。
int[] colors: 表示所需要的渐变颜色数组
float[] stops: 表示每个渐变颜色所在的位置百分点,取值0-1,数量必须与colors数组保持一致,不然运行时将崩溃,一般第一个数值取0,最后一个数值取1;如果第一个数值和最后一个数值并没有取0和1,比如我们这里取一个位置数组:{0.1,0.5,0.9},起始点是0.1百分比位置,结束点是0.9百分比位置,而0-0.1百分比位置和0.9-1.0百分比的位置都是没有指定颜色的。而这些位置的颜色就是根据我们指定的TileMode空白区域填充模式来自行填充!!
所以,这个是需要设置每个渐变所包容的区域。
注意:
如果你的环状图需要跟随你的手势进行移动。那么建议你采用Bitmap模式,先将环形信息绘制到Bitmap 之中,然后再进行canvas 绘制Bitmap。
这样可以减少在onDraw() 方法之中的 频繁创建RadialGradient。
评论区