Android實(shí)際開(kāi)發(fā)中經(jīng)常用到Path來(lái)畫一些點(diǎn)兼呵、線、圓驮瞧、貝塞爾曲線等氓扛,現(xiàn)在閑暇了,來(lái)個(gè)小的總結(jié)吧论笔。
-
moveTo
moveTo用來(lái)移動(dòng)畫筆采郎。Android默認(rèn)屏幕的左上角坐標(biāo)為(0,0), -
lineTo
lineTo用于繪制直線狂魔,默認(rèn)是從左上角(0,0)開(kāi)始繪制尉剩。
mPath.lineTo(100, 100);
canvas.drawPath(mPath, mPaint);
-
quadTo
quadTo用來(lái)繪制貝塞爾曲線。
quadTo(float x1, float y1, float x2, float y2)毅臊,其中(x1,y1)為控制點(diǎn),(x2管嬉,y2)為結(jié)束點(diǎn)皂林。
mPath.moveTo(100, 400);
mPath.quadTo(200, 100, 600, 400);
canvas.drawPath(mPath, mPaint);
也可以通過(guò)連續(xù)的quadTo實(shí)現(xiàn)其他圖形,下邊畫一個(gè)簡(jiǎn)單的水滴形狀:
mPath.moveTo(200,700);
mPath.quadTo(50,900,200,910);
mPath.quadTo(350,900,200,700);
canvas.drawPath(mPath,mPaint);
道理很簡(jiǎn)單蚯撩,下圖是模擬出水滴的起始點(diǎn)础倍、三個(gè)控制點(diǎn),Path會(huì)根據(jù)這四個(gè)點(diǎn)繪制出貝塞爾圖形胎挎,如果要繪制其他有難度的圖形沟启,可以先模擬出個(gè)個(gè)點(diǎn)的位置,分析曲線的路徑犹菇,就可以確定每個(gè)點(diǎn)的坐標(biāo)了德迹。
-
cubicTo
cubicTo跟quadTo一樣,都是用來(lái)繪制貝塞爾曲線的揭芍,只是多個(gè)一個(gè)控制點(diǎn)胳搞。
cubicTo(float x1, float y1, float x2, float y2, float x3, float y3),其中(x1称杨,y1)肌毅、(x2,y2)是控制點(diǎn)姑原,(x3悬而,y3)是結(jié)束點(diǎn)。
mPath.moveTo(100,500);
mPath.cubicTo(100, 500, 300, 100, 600, 500);
canvas.drawPath(mPath, mPaint);
用cubicTo實(shí)現(xiàn)上邊那個(gè)水滴锭汛,和用quadTo實(shí)現(xiàn)是一樣的笨奠,就是多個(gè)控制點(diǎn),如果控制點(diǎn)位置放的好的話店乐,形狀會(huì)更逼真艰躺。
將mPath移動(dòng)到(0,0)點(diǎn)后繪制出來(lái)的曲線也很美的:
mPath.moveTo(0,0);
mPath.cubicTo(100, 500, 300, 100, 600, 500);
canvas.drawPath(mPath, mPaint);
-
arcTo
arcTo用來(lái)繪制弧線(好吧,上邊的quadTo和cubicTo也能實(shí)現(xiàn)眨八,但是arcTo實(shí)際上是截取了圓或者橢圓的一部分)腺兴。
arcTo(RectF oval, float startAngle, float sweepAngle),oval為橢圓的矩形廉侧,startAngle為開(kāi)始角度页响,sweepAngle為結(jié)束角度。(注意:開(kāi)始角度是從3點(diǎn)鐘方向開(kāi)始段誊,順時(shí)針開(kāi)始計(jì)算)
mRectF = new RectF(10, 10, 300, 300);
mPath.arcTo(mRectF, 0, 90);
canvas.drawPath(mPath, mPaint);
還有四個(gè)參數(shù)的這個(gè)arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo)闰蚕,API是這么說(shuō)的“If true, always begin a new contour with the arc”,就是說(shuō)连舍,每次繪制都是從這個(gè)RectF的0度開(kāi)始也就是3點(diǎn)鐘方向没陡。有什么用?有……當(dāng)使用同一個(gè)Path在其他位置繪制完成后再繪制該arc,如果為false那么上次繪制的結(jié)束點(diǎn)就會(huì)鏈接到這個(gè)RectF的0度位置盼玄,如果為true那么Path是直接移動(dòng)到RectF的0度位置贴彼,中間不進(jìn)行繪制。
-
close
close就是關(guān)閉當(dāng)前路徑了埃儿。應(yīng)該這么理解器仗,關(guān)閉的是這次繪制的路徑,會(huì)在起點(diǎn)和重點(diǎn)連接起來(lái)童番。
- 當(dāng)然還有其他的精钮,等有時(shí)間了再慢慢補(bǔ)充吧