Path详解

1,337 阅读2分钟



初始化先关操作

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);