美文网首页
Path使用

Path使用

作者: 放肆滴微笑 | 来源:发表于2019-11-06 17:00 被阅读0次

Path的常用方法

作用 相关方法 备注
移动起点 moveTo 移动到下一次操作的起点位置
设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同
直线 lineTo 添加上一个点到设置点之间的直线

使用方法

lineTo,moveTo,setLastPoint
lineTo
画一条线,到指定的点,参数为指定的点,从哪个点开始画呢?如果之前没有下笔点,则从0,0位置开始,有下笔点,则从之前path结束的位置开始,如下

Path path = new Path();
path.lineTo(200,200);
path.lineTo(200,0);
canvas.drawPath(path,paint1);
image.png

moveTo

方法名 简介 是否影响之前的操作 是否影响之后操作
moveTo 移动下一次操作的起点位置
setLastPoint 设置之前操作的最后一个点位置

moveTo 只改变下一次操作的起点,开始位置是0,0,当移动到200,200,通过moveTo移动到200,100时候,下一次下笔点就是200,100,再做移动,到200,100,之后就不会产生影响,直到300,300

Path path = new Path();            // 创建Path
path.lineTo(200, 200);        // lineTo
path.moveTo(200, 100);        // moveTo
path.lineTo(200, 0);          // lineTo
path.lineTo(300, 300);
canvas.drawPath(path, paint1);
image.png

setLastPoint是重置上一次操作的最后一个点,在执行完第一次的lineTo的时候,最后一个点是(200,200),而setLastPoint更改最后一个点为(200,100),所以在实际执行的时候,第一次的lineTo就不是从原点O到(200,200)的连线了,而变成了从原点到(200,100)之间的连线了。

Path path = new Path();            // 创建Path
path.lineTo(200, 200);        // lineTo
path.setLastPoint(200, 100);        // moveTo
path.lineTo(200, 0);          // lineTo
path.lineTo(300, 300);
canvas.drawPath(path, paint1);
image.png

addXXX
1、基本形状

// 圆形
public void addCircle (float x, float y, float radius, Path.Direction dir)
// 椭圆
public void addOval (RectF oval, Path.Direction dir)
// 矩形
public void addRect (float left, float top, float right, float bottom, Path.Direction dir)
public void addRect (RectF rect, Path.Direction dir)
// 圆角矩形
public void addRoundRect (RectF rect, float[] radii, Path.Direction dir)
public void addRoundRect (RectF rect, float rx, float ry, Path.Direction dir)

Path.Direction

类型 简介
CW 顺时针
CCW 逆时针

图形在实际记录中就是记录各个的点,对于一个图形来说肯定有多个点,既然有这么多的点,肯定就需要一个先后顺序,这里顺时针和逆时针就是用来确定记录这些点的顺序的。
比如一个矩形,顺时针ABCD,逆时针ADCB
通过代码,修改最后一个点的位置,也就是用setLastPoint方法把矩形最后一个点位置修改了
顺时针

canvas.drawRect(-200,-200,200,200,paint);
Path path = new Path();
path.addRect(-200,-200,200,200, Path.Direction.CW);
path.setLastPoint(-300,300);                // <-- 重置最后一个点的位置
canvas.drawPath(path,paint1);
image.png

逆时针

canvas.drawRect(-200,-200,200,200,paint);
Path path = new Path();
path.addRect(-200,-200,200,200, Path.Direction.CCW);
path.setLastPoint(-300,300);                // <-- 重置最后一个点的位置
canvas.drawPath(path,paint1);
image.png

2、addArc和arcTo添加一个圆弧

// addArc
public void addArc (RectF oval, float startAngle, float sweepAngle)
public void addArc(float left, float top, float right, float bottom, float startAngle,
            float sweepAngle)
// arcTo
public void arcTo (RectF oval, float startAngle, float sweepAngle)
public void arcTo (RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo)
参数 简介
RectF 矩形
left,top,right,bottom 也就是一个矩形
oval 圆弧的外切矩形
sweepAngle 圆弧的角度[-360,360)
forceMoveTo 是否强制使用MoveTo

从名字就可以看出,这两个方法都是与圆弧相关的,作用都是添加一个圆弧到path中,但既然存在两个方法,两者之间肯定是有区别的:

名称 区别
addArc 直接添加一个圆弧到path中
arcTo 添加一个圆弧到path,如果圆弧的起点和上次最后一个坐标点不相同,就连接两个点
Path path = new Path();
path.lineTo(100,100);
RectF rectF = new RectF(0,0,200,200);
path.addArc(rectF,0,270); //相当于画一个矩形,在矩形中有个圆,圆弧从0°到270°
canvas.drawPath(path,paint1);
canvas.drawRect(rectF,paint);
image.png
//添加一个圆弧到path,如果圆弧的起点和上次最后一个坐标点不相同,就连接两个点
        //forceMoveTo true 不链接
        //forceMoveTo false 连接
        Path path = new Path();
        path.lineTo(100,100);
        RectF rectF = new RectF(0,0,200,200);
        path.arcTo(rectF,0,180,false);
        path.lineTo(300,300);
        canvas.drawPath(path,paint1);
        canvas.drawRect(rectF,paint);

如果是false 则连接,


image.png

true 不连接


image.png

相关文章

网友评论

      本文标题:Path使用

      本文链接:https://www.haomeiwen.com/subject/uucubctx.html