一起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类常用方法介绍)

一起Talk Android吧(第四百五十二回:给View添加滑动事件一)

一起Talk Android吧(第四百三十二回:Java8中的时间类)