最近在寫android畫圖常常用到這幾個什麼什麼To
,一開始還真不知道cubicTo
這個方法,更不用說能不能分清楚它們了,因此特此來作個小筆記,記錄下moveTo、lineTo、quadTo、cubicTo、arcTo的做用,在自定義view的時候常常用到。
接下來也會分享下這幾天寫的幾個東西。相信對於新手也會有點幫助,高手也幫忙看看有沒錯,歡迎吐槽吐槽。android
moveTo
不會進行繪製,只用於移動移動畫筆。
結合如下方法進行使用。canvas
lineTo
用於進行直線繪製。ide
mPath.lineTo(300, 300); canvas.drawPath(mPath, mPaint);
默認從座標(0,0)開始繪製。如圖:動畫
剛纔咱們不說了moveTo
是用來移動畫筆的嗎?this
mPath.moveTo(100, 100); mPath.lineTo(300, 300); canvas.drawPath(mPath, mPaint);
把畫筆移動(100,100)處開始繪製,效果如圖:spa
quadTo
用於繪製圓滑曲線,即貝塞爾曲線。code
mPath.quadTo(x1, y1, x2, y2)
(x1,y1) 爲控制點,(x2,y2)爲結束點。orm
一樣地,咱們仍是得須要moveTo
來協助控制。coffeescript
mPath.moveTo(100, 500); mPath.quadTo(300, 100, 600, 500); canvas.drawPath(mPath, mPaint);
效果如圖:圖片
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)爲控制點繪製貝塞爾曲線:
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 度
,則所得曲線爲四分之一圓的弧線。
效果如圖: