Path详解



初始化先关操作

mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(4);
mPaint.setStyle(Paint.Style.STROKE);复制代码


mPaint.setStyle(Paint.Style.FILL);
mPath.moveTo(100, 500);
mPath.lineTo(140, 800);//连线
mPath.lineTo(250, 600);//连线
mPath.close();//设置曲线是否闭合
canvas.drawPath(mPath, mPaint);
复制代码

可以看到下图效果



设置 mPaint.setStyle(Paint.Style.STROKE);效果如图



将 mPath.close();//设置曲线是否闭合 注释调后 连线将不会闭合




//添加子图形addXXX
// 添加弧形
mPath.addArc(200, 200, 400, 400, -225, 225);
前四个参数表示绘制的矩形区域,-255表示绘制的角度,255表示顺时针扫过的角度复制代码



 //Path.Direction.CW表示顺时针方向绘制,CCW表示逆时针方向
 mPath.addRect(500, 500, 900, 900, Path.Direction.CW);
 //添加一个圆
 mPath.addCircle(700,700, 200, Path.Direction.CW);
//添加一个椭圆
 mPath.addOval(100,100,500,300, Path.Direction.CCW);
 canvas.drawPath(mPath, mPaint);复制代码



 mPath.addArc(200, 200, 400, 400, -225, 225);
//追加图形
//xxxTo画线
 mPath.arcTo(400, 200, 600, 400, -180, 225, false);
 canvas.drawPath(mPath, mPaint);复制代码




//forceMoveTo,true,绘制时移动起点,false,绘制时连接最后一个点与圆弧起点
mPath.moveTo(0, 0);
mPath.lineTo(100, 100);
mPath.arcTo(400, 200, 600, 400, 0, 270, true);
canvas.drawPath(mPath, mPaint);复制代码


//forceMoveTo,true,绘制时移动起点,false,绘制时连接最后一个点与圆弧起点
mPath.moveTo(0, 0);
mPath.lineTo(100, 100);
mPath.arcTo(400, 200, 600, 400, 0, 270, false);
canvas.drawPath(mPath, mPaint);复制代码



  //添加一个路径
mPath.moveTo(100, 70);
mPath.lineTo(140, 180);
mPath.lineTo(250, 330);
mPath.lineTo(400, 630);
mPath.lineTo(100, 830);

Path newPath = new Path();
newPath.moveTo(100, 1000);
newPath.lineTo(600, 1300);
newPath.lineTo(400, 1700);
mPath.addPath(newPath);

canvas.drawPath(mPath, mPaint);复制代码




//添加圆角矩形, CW顺时针,CCW逆时针
RectF rectF5 = new RectF(200, 800, 700, 1200);
mPath.addRoundRect(rectF5, 20, 20, Path.Direction.CCW);
canvas.drawPath(mPath, mPaint);复制代码




path 用来绘制塞尔曲线

1阶贝塞尔曲线就是一条直线

 mPath.moveTo(100, 70); //移动 

 mPath.lineTo(140, 800);//连线


二阶贝塞尔曲线

mPath.moveTo(300, 500);
mPath.quadTo(500, 100, 800, 500);
canvas.drawPath(mPath, mPaint);复制代码



三阶贝塞尔曲线

mPath.moveTo(300, 500);
mPath.cubicTo(500, 100, 600, 1200, 800, 500);
canvas.drawPath(mPath, mPaint);复制代码


转载于:https://juejin.im/post/5cff5e26e51d4558936aa05b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值