標籤:
1、Why
最近在寫android畫圖經常用到這幾個什麼什麼To,一開始還真不知道cubicTo這個方法,更不用說能不能分清楚它們了,所以特此來做個小筆記,記錄下moveTo、lineTo、quadTo、cubicTo、arcTo的作用,在自訂view的時候經常用到。
接下來也會分享下這幾天寫的幾個東西。相信對於新手也會有點協助,高手也幫忙看看有沒錯,歡迎吐槽吐槽。
2、moveTo
moveTo 不會進行繪製,只用於移動移動畫筆。
結合以下方法進行使用。
3、lineTo
lineTo 用於進行直線繪製。
mPath.lineTo(300, 300);canvas.drawPath(mPath, mPaint);
預設從座標(0,0)開始繪製。
剛才我們不說了moveTo是用來移動畫筆的嗎?
mPath.moveTo(100, 100);mPath.lineTo(300, 300);canvas.drawPath(mPath, mPaint);
把畫筆移動(100,100)處開始繪製,效果
4、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);
效果
5、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);
看看效果:
一模一樣!
如果我們不加 moveTo 呢?
則以(0,0)為起點,(100,500)和(300,100)為控制點繪製貝茲路徑:
6、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 度 ,則所得曲線為四分之一圓的弧線。
效果
Android中moveTo、lineTo、quadTo、cubicTo、arcTo詳解