Android中moveTo、lineTo慕匠、quadTo饱须、cubicTo、arcTo詳解(實(shí)例)
android
1台谊、Why
最近在寫(xiě)android畫(huà)圖經(jīng)常用到這幾個(gè)什么什么To
蓉媳,一開(kāi)始還真不知道cubicTo
這個(gè)方法,更不用說(shuō)能不能分清楚它們了青伤,所以特此來(lái)做個(gè)小筆記督怜,記錄下moveTo、lineTo狠角、quadTo号杠、cubicTo、arcTo的作用丰歌,在自定義view的時(shí)候經(jīng)常用到姨蟋。接下來(lái)也會(huì)分享下這幾天寫(xiě)的幾個(gè)東西。相信對(duì)于新手也會(huì)有點(diǎn)幫助立帖,高手也幫忙看看有沒(méi)錯(cuò)眼溶,歡迎吐槽吐槽。
2晓勇、moveTo
moveTo
不會(huì)進(jìn)行繪制堂飞,只用于移動(dòng)移動(dòng)畫(huà)筆。結(jié)合以下方法進(jìn)行使用绑咱。
3绰筛、lineTo
lineTo
用于進(jìn)行直線繪制。
mPath.lineTo(300, 300);canvas.drawPath(mPath, mPaint);
默認(rèn)從坐標(biāo)(0,0)開(kāi)始繪制描融。如圖:
剛才我們不說(shuō)了moveTo
是用來(lái)移動(dòng)畫(huà)筆的嗎铝噩?
mPath.moveTo(100, 100);mPath.lineTo(300, 300);canvas.drawPath(mPath, mPaint);
把畫(huà)筆移動(dòng)(100,100)處開(kāi)始繪制,效果如圖:
4窿克、quadTo
quadTo
用于繪制圓滑曲線骏庸,即貝塞爾曲線。
mPath.quadTo(x1, y1, x2, y2)
(x1,y1) 為控制點(diǎn)年叮,(x2,y2)為結(jié)束點(diǎn)具被。
同樣地,我們還是得需要moveTo
來(lái)協(xié)助控制只损。
mPath.moveTo(100, 500);mPath.quadTo(300, 100, 600, 500);canvas.drawPath(mPath, mPaint);
效果如圖:
5硬猫、cubicTo
cubicTo
同樣是用來(lái)實(shí)現(xiàn)貝塞爾曲線的。
mPath.cubicTo(x1, y1, x2, y2, x3, y3)
(x1,y1) 為控制點(diǎn),(x2,y2)為控制點(diǎn)啸蜜,(x3,y3) 為結(jié)束點(diǎn)。
那么辈挂,cubicTo
和 quadTo
有什么不一樣呢衬横?
官方是這么說(shuō)的:
Same as cubicTo, but the coordinates are considered relative to the current point on this contour.
說(shuō)白了,就是多了一個(gè)控制點(diǎn)而已终蒂。
然后蜂林,我們想繪制和上一個(gè)一樣的曲線,應(yīng)該怎么寫(xiě)呢拇泣?
mPath.moveTo(100, 500);mPath.cubicTo(100, 500, 300, 100, 600, 500);
看看效果:
一模一樣噪叙!
如果我們不加 moveTo
呢?
則以(0,0)為起點(diǎn)霉翔,(100,500)和(300,100)為控制點(diǎn)繪制貝塞爾曲線:
6睁蕾、arcTo
arcTo
用于繪制弧線(實(shí)際是截取圓或橢圓的一部分)。
mPath.arcTo(ovalRectF, startAngle, sweepAngle)
, ovalRectF
為橢圓的矩形债朵,startAngle
為開(kāi)始角度子眶,sweepAngle
為結(jié)束角度。
mRectF = new RectF(10, 10, 600, 600);mPath.arcTo(mRectF, 0, 90);canvas.drawPath(mPath, mPaint);
由于new RectF(10, 10, 600, 600)
為正方形序芦,又截取 0 ~ 90 度
臭杰,則所得曲線為四分之一圓的弧線。
效果如圖: