概述
路径,可用于绘制直线,曲线构成几何路径,还可用于根据路径绘制文字
-
Path
的常用Api有移动,连线,闭合,添加图形等
如:
mPath.moveTo(100, 70); //移动
mPath.lineTo(140, 800);//连线
mPath.rLineTo(40, 730);//相对于当前path的位置连线,和上一行代码效果相同
mPath.close();//设置曲线闭合
注: mPath.lineTo()方法便是的就是绘制一条一阶贝塞尔曲线
-
Path
还有很多addXxx()
方法,表示添加子图形,比如:
//添加弧形,前面四个参数表示弧形所在的矩形范围,倒数第二个参数表示开始绘制的角度,最后一个参数表示弧形扫过得角度
mPath.addArc(200, 200, 400, 400, -225, 225);
//Path.Direction.CW表示顺时针方向绘制,CCW表示逆时针方向
mPath.addRect(500, 500, 900, 900, Path.Direction.CW);
//添加一个圆
mPath.addCircle(700,700, 200, Path.Direction.CW);
//添加一个椭圆
mPath.addOval(0,0,500,300, Path.Direction.CCW);
//添加圆角矩形, CW顺时针,CCW逆时针
RectF rectF = new RectF(200, 800, 700, 1200);
//第二和第三个参数分别表示x,y方向的圆角半径
mPath.addRoundRect(rectF, 20, 20, Path.Direction.CCW);
-
Path
有很多xxxTo()
方法可以追加子图形,比如:
//追加弧形,最后一个参数 forceMoveTo,true,绘制时移动起点,false,绘制时连接最后一个点与圆弧起点
mPath.arcTo(400, 200, 600, 400, -180, 225, false);
对于最后一个参数我们看下代码和对比图:
mPath.moveTo(0, 0);
mPath.lineTo(100, 100);
mPath.arcTo(400, 200, 600, 400, 0, 270, false/true);
forceMoveTo效果
-
Path
还可以通过addPath()方法添加路径
mPath.lineTo(100, 830);
//创建新的Path对象
Path newPath = new Path();
newPath.moveTo(100, 1000);
newPath.lineTo(600, 1300);
newPath.lineTo(400, 1700);
//将新创建的Path添加到原来的Path对象中
mPath.addPath(newPath);
-
Path
可以绘制多阶贝塞尔曲线
例如画二阶贝塞尔曲线,效果如下:
mPath.moveTo(300, 500);
mPath.quadTo(500, 100, 800, 500);
二阶贝塞尔曲线
画二阶贝塞尔曲线还有一个方法
mPath.moveTo(300, 500);
//参数表示相对位置,效果同上
mPath.rQuadTo(200, -400, 500, 0);
画三阶贝塞尔曲线
//画三阶贝塞尔曲线
mPath.moveTo(300, 500);
//mPath.cubicTo(500, 100, 600, 1200, 800, 500);
//参数表示相对位置,等同于上面一行代码
mPath.rCubicTo(200, -400, 300, 700, 500, 0);
三阶贝塞尔曲线
很多自定义View中会使用到贝塞尔曲线的绘制,比如QQ消息的拖拽效果等...
代码见: Android Path案例-仿QQ气泡的拖拽效果
网友评论