侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 274 篇文章
  • 累计创建 55 个标签
  • 累计收到 74 条评论

Android Canvas 绘制光晕效果

Z同学
2020-11-03 / 0 评论 / 0 点赞 / 1,615 阅读 / 1,000 字
温馨提示:
本文最后更新于 2021-11-18,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

我们如果由于需求,需要在自定义控件之中,绘制带有光晕效果的图。

例如下面的效果:
image.png

我们该如何绘制?

方法

采用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。

0

评论区