文章开篇

关于做技能做开发的我来说,我一向以为和相信这样一句话“纸上得来终觉浅,绝知此事要躬行”!

感谢各位点击进入阅读该篇文章,本文仅仅是介绍CornerPathEffect的运用以及沟通自定义View时的一些思路和主意,欢迎在下面留言评论。若大大您知道了解CornerPathEffect完全可以忽略脱离,不要糟蹋过多的时间(当然欢迎在文章底部留下您名贵主张)。

CornerPathEffect介绍和说明
public class CornerPathEffect extends PathEffect {
    /**
     * Transforms geometries that are drawn (either STROKE or FILL styles) by
     * replacing any sharp angles between line segments into rounded angles of
     * the specified radius.
     * @param radius Amount to round sharp angles between line segments.
     */
    public CornerPathEffect(float radius) {
        native_instance = nativeCreate(radius);
    }
    private static native long nativeCreate(float radius);
}

以上是我将CornerPathEffect类源码仿制出来的,没错,就这么点!先来看下官方在构造函数上面的注释:转化xxxxx描边或填充样式xxxx之间xxxx特定的半径,靠,算了,找百度在线翻译,大致是这样: 通过将线段之间的任何锐角替换为指定半径圆角,将制作的几何图形(STROKE或FILL样式)转化为指定半径的圆角。 其实官方注释差不多也说得很理解了,便是将Path的各个衔接线段之间的夹角用一种更滑润的方法衔接,类似于圆弧与切线的作用。 参数呢,就单单看参数名称其实也很理解了,参数注释翻译过来大致是:即线段之间的圆角

然后CornerPathEffect在这儿就介绍完了,或许立刻就有大大说,就这?没方法真的就这!当我在实践开发中遇到了相关的问题,并以CornerPathEffect处理了之后,便是想要写一篇关于CornerPathEffect的文章,我就想要去弄懂它,这样我才有写的呀,我尽力去找过材料,百度呀什么搜索过的,官方文档上面也去看了CornerPathEffect,但的确我这儿就只有这样的解说,然后最多也便是从源码看出它是特别的PathEffect,由于继承PathEffect,是PathEffect的子类嘛(假如您有更多的材料解说之类的,劳烦请留言,我也很想知道)

所以才有开篇说的那样,仅仅是“介绍CornerPathEffect的运用”。

从遇到的问题动身,学习CornerPathEffect的运用

一个简单的栗子,比方制作圆角矩形,很容就想到的api:

canvas.drawRoundRect(@NonNull RectF rect, float rx, float ry, @NonNull Paint paint)
canvas.drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, @NonNull Paint paint)

比方制作了一个下面一个矩形(部分代码片段):

......
@Override
protected void onDraw(Canvas canvas) {
    canvas.drawRoundRect(300, 400,1000, 900, 30, 30, mPaint);
}

神器 —— CornerPathEffect!Android自定义View时绘制相关圆角

假如我用CornerPathEffect呢?我可以这样:

......
// 给Paint设置CornerPathEffect
mPaint.setPathEffect(new CornerPathEffect(30));
......
@Override
protected void onDraw(Canvas canvas) {
    canvas.drawRect(300, 400,1000, 900, mPaint);
};

乃至我还可以这样,直接依据坐标,先制作4个点:

......
// 给Paint设置CornerPathEffect
mPaint.setPathEffect(new CornerPathEffect(30));
......
// 制作4个点坐标,当然lineTo的时候得留意点的顺序
mPath = new Path();
mPath.moveTo(300,400);
mPath.lineTo(1000,400);
mPath.lineTo(1000,900);
mPath.lineTo(300,900);
mPath.close();
......
@Override protected void onDraw(Canvas canvas) {
      canvas.drawPath(mPath, mPaint); 
};

不必怀疑(当然可以编码测验),这两种方法都是经过我验证了的,作用出现就和上图一样。

怎样发现CornerPathEffect的

当然还要从实践需求项目中动身,以下是其时项目部分UI设计原型

神器 —— CornerPathEffect!Android自定义View时绘制相关圆角

其时制作出图中正五边形时,五边形圆角一向不知道怎样处理,想过用贝塞尔试试?没方法!也做过最坏的计划,在五边形五个点出再制作五段圆弧,正当准备做好最坏计划开端编码的时候,思来想去,太杂乱了,每点去制作圆弧,还要去核算另外的点坐标,太麻烦了!

其时心想,不或许有这么杂乱的圆角制作,肯定有更简单的制作圆角的方法!其时这个心里边主意很笃定,肯定有更简单的制作圆角的方法,没有那便是自己不知道。所以我就百度xxx圆角xxx方面的关键字,果然在CSDN一篇文章中找到了CornerPathEffect,这儿仍是要感谢那文章以及作者,不过真实抱歉,已经忘掉那篇文章的链接地址了……

写在最后

当遇到困难的工作,自己无法处理的时候,不必怀疑是处理不了的;或是说一个杂乱的工作,要勇于质疑它的杂乱性,由于那正是你知识所缺少的一个点。