记录下moveTo、lineTo、quadTo、cubicTo、arcTo的作用,在自定义view的时候经常用到。

1、moveTo

moveTo 不会进行绘制,只用于移动移动画笔。

结合以下方法进行使用。

2、lineTo

lineTo 用于进行直线绘制。

mPath.lineTo(300, 300);

canvas.drawPath(mPath,mPaint);

默认从坐标(0,0)开始绘制。如图:

bc9dbd53c2a5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

moveTo是用来移动画笔的

把画笔移动(100,100)处开始绘制,效果如图:

bc9dbd53c2a5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

3、quadTo

quadTo 用于绘制圆滑曲线,即贝塞尔曲线。

mPath.quadTo(x1, y1, x2, y2) (x1,y1) 为控制点,(x2,y2)为结束点。

同样地,我们还是得需要moveTo来协助控制。

mPath.moveTo(100,500);mPath.quadTo(300,100,600,500);

canvas.drawPath(mPath, mPaint);

效果如图:

bc9dbd53c2a5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

4、cubicTo

cubicTo 同样是用来实现贝塞尔曲线的。

mPath.cubicTo(x1, y1, x2, y2, x3, y3) (x1,y1) 为控制点,(x2,y2)为控制点,(x3,y3) 为结束点。

那么,cubicTo 和 quadTo 有什么不一样呢?

官方是这么说的:

Same as cubicTo, but the coordinates are considered relative to the current point on this contour.

说白了,就是多了一个控制点而已。

然后,我们想绘制和上一个一样的曲线,应该怎么写呢?

mPath.moveTo(100,500);

mPath.cubicTo(100,500,300,100,600,500);

看看效果:

bc9dbd53c2a5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

如果我们不加 moveTo 呢?

则以(0,0)为起点,(100,500)和(300,100)为控制点绘制贝塞尔曲线:

bc9dbd53c2a5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

5、arcTo

arcTo 用于绘制弧线(实际是截取圆或椭圆的一部分)。

mPath.arcTo(ovalRectF, startAngle, sweepAngle) , ovalRectF为椭圆的矩形,startAngle 为开始角度,sweepAngle为结束角度。

mRectF = new RectF(10,10,600,600);mPath.arcTo(mRectF,0,90);canvas.drawPath(mPath, mPaint);

由于new RectF(10, 10, 600, 600)为正方形,又截取 0 ~ 90 度 ,则所得曲线为四分之一圆的弧线。

效果如图:

bc9dbd53c2a5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

转载至https://segmentfault.com/a/1190000000721127

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐