专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

path是什么意思,path详解

来源:小易整编  作者:小易  发布时间:2023-03-15 04:26
摘要:path是什么意思,path详解Path路径,可用于绘制直线、曲线构成几何路径,还可以用于根据路径绘制文字,常用API如移动、连线、闭合、添加图形等。//画笔初始化Paintpaint=newPaint()paint.setColor(C...

path是什么意思,path详解

Path 路径,可用于绘制直线、曲线构成几何路径,还可以用于根据路径绘制文字,常用 API 如移动、连线、闭合、添加图形等。

//画笔初始化Paint paint = new Paint();paint.setColor(Color.RED);paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(10);//路径初始化Path path = new Path();

//起始点为坐标原点moveTo(float x, float y);//上次的终点为起始点,相对位置坐标rMoveTo(float dx, float dy);

//直线lineTo(float x, float y);//绘制圆弧arcTo(@NonNull RectF oval, float startAngle, float sweepAngle,                      boolean forceMoveTo);//绘制矩形//Path.Direction.CW 顺时针//Path.Direction.CCW 逆时针addRect(@NonNull RectF rect, @NonNull Direction dir);//绘制椭圆addOval(@NonNull RectF oval, @NonNull Direction dir);//绘制圆addCircle(float x, float y, float radius, @NonNull Direction dir);//绘制圆弧addArc(@NonNull RectF oval, float startAngle, float sweepAngle);//绘制圆角矩形addRoundRect(@NonNull RectF rect, float rx, float ry, @NonNull Direction dir);//二阶贝塞尔曲线quadTo(float x1, float y1, float x2, float y2);//三阶贝塞尔曲线cubicTo(float x1, float y1, float x2, float y2,float x3, float y3);

对于 arcTo 与 addArc 都是绘制圆弧,有什么不同么?主要就在于 forceMoveTo 这个参数

/* * Append the specified arc to the path as a new contour. If the start of * the path is different from the path's current last point, then an * automatic lineTo() is added to connect the current contour to the * start of the arc. However, if the path is empty, then we call moveTo() * with the first point of the arc. * 翻译: * 将指定的弧线作为新轮廓附加到路径上。 * 如果路径的起始点与路径当前的最后一点不同,则自动添加lineTo(),将当前轮廓连接到弧的起始点。 * 但是,如果路径是空的,则调用带有弧线的第一个点的moveTo()。 */ public void arcTo(float left, float top, float right, float bottom, float startAngle,            float sweepAngle, boolean forceMoveTo) {   isSimplePath = false;   nArcTo(mNativePath, left, top, right, bottom, startAngle, sweepAngle, forceMoveTo);}

path.lineTo(250,250);//当 forceMoveTo = true;时 画笔是 moveTo 圆弧的起点path.arcTo(0, 0, 500, 500, 0, 90, true);canvas.drawPath(path, paint);

path是什么意思,path详解

path.lineTo(250,250);//当 forceMoveTo = false;时 画笔是 lineTo 圆弧的起点path.arcTo(0, 0, 500, 500, 0, 90, false);canvas.drawPath(path, paint);

path是什么意思,path详解

当 arcTo 方法将 forceMoveTo 设置为 true 时,与 addArc 方法相同。

还有一个 op 组合的方法

//为了方便看效果,先设置 style 为 FILLpaint.setStyle(Paint.Style.FILL);

path.addCircle(200, 200, 100, Path.Direction.CW);//需要两条路径path2.addCircle(300, 300, 100, Path.Direction.CW);path.op(path2, Path.Op.DIFFERENCE);canvas.drawPath(path, paint);

public enum Op {        /**         * 从第一条路径减去第二条路径         */        DIFFERENCE,        /**         * 路径相交         */        INTERSECT,        /**         * 联合         */        UNION,        /**         * 排他         */        XOR,        /**         * 用第二条路径减去第一条路径         */        REVERSE_DIFFERENCE}

//用第二个路径减去第一个路径,保留第一个路径剩余部分path.op(path2, Path.Op.DIFFERENCE);

path是什么意思,path详解

//只取两个路径交集path.op(path2, Path.Op.INTERSECT);

path是什么意思,path详解

//联合,将两个路径变为一个路径path.op(path2, Path.Op.UNION);

path是什么意思,path详解

但是这个不明显,我们修改一下 Paint 的 style

paint.setStyle(Paint.Style.STROKE);

path是什么意思,path详解

//去除两个路径交集部分path.op(path2, Path.Op.XOR);

path是什么意思,path详解

//用第一个路径减去第二个路径,保留第二个路径剩余部分path.op(path2, Path.Op.REVERSE_DIFFERENCE);

path是什么意思,path详解

而对于 setFillType 方法只需要一条路就可以了

path.addCircle(200, 200, 100, Path.Direction.CW);path.addCircle(300, 300, 100, Path.Direction.CW);path.setFillType(Path.FillType.WINDING);canvas.drawPath(path, paint);

public enum FillType {        /**         * 绘制路径内部区域         */        WINDING         (0),        /**         * 去除交集部分         */        EVEN_ODD        (1),        /**         * 绘制路径外区域         */        INVERSE_WINDING (2),        /**         * 绘制交集与路径外区域         */        INVERSE_EVEN_ODD(3);}

//绘制路径内部区域path.setFillType(Path.FillType.WINDING);

path是什么意思,path详解

//去除交集部分path.setFillType(Path.FillType.EVEN_ODD);

path是什么意思,path详解

//绘制路径外区域path.setFillType(Path.FillType.INVERSE_WINDING);

path是什么意思,path详解

//绘制交集与路径外区域path.setFillType(Path.FillType.INVERSE_EVEN_ODD);

path是什么意思,path详解

这里没有介绍 lineTo、addRect、addArc、addOval、addCirlce、addRoundRect,因为这几个方法比较简单。明天主要讲贝塞尔曲线的原理及使用方法。


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/927379.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • 什么是构造函数?详解JavaScript中的构造函数

    什么是构造函数?详解JavaScript中的构造函数

    作为原型和原型链的基础,先了解清楚构造函数以及它的执行过程才能更好地帮助我们学习原型和原型链的知识。本篇文章带大家详细了解一下javascript中的构造函数,介绍一下怎么利用构造函数创建一个js对象,希望对大家有所帮助!一个普通的函数被用...

  • 什么是Linux系统中nc命令?nc命令的用法详解

    什么是Linux系统中nc命令?nc命令的用法详解

    这篇文章主要介绍了linux系统中nc命令的基本用法,nc命令非常之强大,这里先简单介绍它用来作端口扫描以及文件传输等的基础使用。功能说明:功能强大的网络工具,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小...

  • Java中的Scanner操作详解

    Java中的Scanner操作详解

    scanner是java中的一个常用类,用来读取控制台或文件中的输入数据。它提供了一种简单的方式来解析基本类型和字符串,并支持对正则表达式进行匹配。Scanner类位于java.util包中,因此在编写程序时需要import...

  • 带你搞懂git回滚代码(实例详解)

    带你搞懂git回滚代码(实例详解)

    本篇文章给大家带来了关于git回滚代码的相关知识,git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,希望对大家有帮助。在日常coding的过程中免不了分支之间的合并,回滚、提交、打tag等操作,如果你现...

  • C++中的取余函数详解

    C++中的取余函数详解

    C++中的取余函数详解在C++中,取余运算符(%)用于计算两个数相除的余数。它是一种二元运算符,其操作数可以是任何整数类型(包括char、short、int、long等),也可以是浮点数类型(如float、double)。取余运算符返回的结...

  • c语言中fun用法详解

    c语言中fun用法详解

    c语言中fun用法详解fun函数是自定义的C/C++语言函数,函数功能多样。该函数名为“函数”英文function的简写,一般在示例和试题中使用,通常在主函数中被调用。C/C++语言中,fun函数通常被主函数所调用。它是指用fun来定义一个...

  • 详解GitLab自动化部署的流程和基本方法

    详解GitLab自动化部署的流程和基本方法

    gitlab是目前较为流行的代码托管平台之一,它不仅提供代码存储和版本管理功能,而且还支持自动化部署,方便开发者快速地将代码部署到服务器上进行测试和生产环境发布。本文将介绍gitlab自动化部署的流程和基本实现方法。首先,GitLab...

  • chdir函数介绍与使用方法详解

    chdir函数介绍与使用方法详解

    chdir()函数改变当前的目录。此函数成功则返回TRUE。失败则返回FALSE,且抛出E_WARNING级别的错误。实例代码输出结果:Changed current directory successfully Explanat...

  • 周排行
  • 月排行
  • 年排行

精彩推荐