一起Talk Android吧(第四百二十二回:绘图中添加发光效果)
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第四百二十二回:绘图中添加发光效果)相关的知识,希望对你有一定的参考价值。
各位看官们,大家好,上一回中咱们说的例子是"绘图中添加阴影",这一回咱们介绍的例子是"绘图中添加发光效果"。闲话休提,言归正转,让我们一起Talk android吧!
使用背景
看官们,我们在上一章回中介绍了如何在绘图中添加阴影,阴影的原理就是在原图的x和y轴方向偏移一段位置来显示原图,如果我们想在原图的四个方向上都做偏移,那么就会生产发光效果,这种效果类似太阳发出光芒的效果。本章回中我们将介绍如何在绘图中添加发光效果。
添加方法
首先给画笔设置发光效果,然后使用此画笔来绘制图形,使用此画笔绘制的图形就带上了发光效果。画笔使用Paint类表示,该类提供了setMaskFilter
()方法来设置
发光效果。我们需要给该方法传递BlurMaskFilter
类型的对象来控件发光效果,具体的代码如下:
BlurMaskFilter blurMaskFilter = new BlurMaskFilter(90, BlurMaskFilter.Blur.INNER);
mArcPaint.setMaskFilter(blurMaskFilter);
在创建BlurMaskFilter
对象时传递了两个参数,第一个参数是发光的半径,发光效果和阴影效果一样,也使用了高斯模糊算法,这个半径主要用来控制发光时的模糊效果,它的值越大,图形越模糊。第二个参数用来控制发光的方式,它是一个枚举值,详细的值和含义如下:
public static enum Blur
NORMAL, //内外同时发光
SOLID, //外发光
OUTER, //只有发光效果,忽略图形效果
INNER; //内发光
示例代码
下面是一个示例代码,请大家参考:
private void drawShineEffect(Canvas canvas)
//早期版本需要关闭硬件加速,新版本(Android12)上不需要,关闭硬件加速后反而无法显示绘图效果
// setLayerType(View.LAYER_TYPE_SOFTWARE,null);
//此类型的对象用来发光的方式
BlurMaskFilter blurMaskFilter = new BlurMaskFilter(90, BlurMaskFilter.Blur.INNER);
mArcPaint.setMaskFilter(blurMaskFilter);
mArcPaint.setAntiAlias(true);
mArcPaint.setColor(Color.WHITE);
//使用填充效果看的更加明显一些
mArcPaint.setStyle(Paint.Style.FILL);
canvas.drawCircle(500,500,200,mArcPaint);
我们在代码中把画笔设置了填充模式,这样更加方便观察发光效果。代码中画了一个白色的圆形,它的运行效果类似太阳,有明显的发光效果。我在这里就不演示运行效果了,建议大家自己动手去实践,可以把发光模式修改一下,体验一下不同发光模式下的发光效果。
看官们,关于Android中"绘图中添加发光效果"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
以上是关于一起Talk Android吧(第四百二十二回:绘图中添加发光效果)的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百七十二回:如何获取全局的Context对象)
一起Talk Android吧(第四百八十二回:如何修改Switch的长宽
一起Talk Android吧(第四百八十二回:如何修改Switch的长宽
一起Talk Android吧(第四百一十二回:Math类常用方法介绍)