自定義View 初探-Path
Path 就是個(gè)畫路徑的
源碼注釋:
The Path class encapsulates compound (multiple contour) geometric paths
consisting of straight line segments, quadratic curves, and cubic curves.
It can be drawn with canvas.drawPath(path, paint), either filled or stroked
(based on the paint's Style), or it can be used for clipping or to draw
text on a path
硬式翻譯(硬著臉皮翻):Path這個(gè)類封裝了一些畫幾何圖形的方法缚陷,都是有啥呢适篙?直線,二次曲線箫爷,三次曲線嚷节,通過canvars,drawPath()把你畫的集合圖形繪制出來
- (1)至于是填充的幾何圖形還是只有邊組成的幾何圖形,取決于畫筆的Style虎锚,如果paint style 是STROKE硫痰,那么畫的集合圖形只有邊,如果不設(shè)置默認(rèn)畫的是個(gè)填充的集合圖形
- (2)or it can be used for clipping or to draw text on a path窜护,說的關(guān)于裁剪的這個(gè)我沒有用過效斑,用過再補(bǔ)充。
moveTo(float x, float y)
兩個(gè)點(diǎn)可以畫出個(gè)直線或者面柱徙,那么這個(gè)moveTo(),就是把線的起始位置設(shè)置成(x,y)
lineTo(float x, float y)
這個(gè)就是畫兩點(diǎn)之間線的末端坐標(biāo)啦缓屠,如果不手動(dòng)設(shè)置moveTo(),你再調(diào)用 lineTo(),那么起始端就是你上個(gè)末端的坐標(biāo)啦!
close()
這個(gè)就是把你最初的起點(diǎn)和最后的起點(diǎn)連線护侮,如果你已經(jīng)有兩個(gè)邊了敌完,就可能組成封閉圖形
示例:
mPath.reset();
mPath.moveTo(100, 100);
// 連接路徑到點(diǎn)
mPath.lineTo(300, 100);
mPath.lineTo(400, 200);
mPath.lineTo(200, 200);
mPath.close();//這樣是會(huì)連起來的,幫你把口封住
canvas.drawPath(mPath, mPaint);
這就成了梯形了
quadTo(float x1, float y1, float x2, float y2)
畫個(gè)曲線羊初,二階貝塞爾曲線
那么 P0點(diǎn)就是起始點(diǎn)(moveTo()設(shè)置的滨溉,或者是lineTo()設(shè)置的,或者是默認(rèn)的(0.0))长赞,P1就是參數(shù)(x1,y1)了晦攒,p2(x2,y2)啦
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPath.reset();
mPath.moveTo(100, 100);
mPath.quadTo(200, 200, 300, 100);
mPath.quadTo(400, 200, 500, 100);
canvas.drawPath(mPath, mPaint);
}
如圖:
cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)
三階貝塞爾曲線
與quadTo類似,前四個(gè)參數(shù)表示兩個(gè)控制點(diǎn)涧卵,最后兩個(gè)參數(shù)表示終點(diǎn)勤家。其實(shí),(x1,y1)就是P1,(x2,y2)是P2柳恐,(x3,y3)是P3
最后
參考
PS: 歡迎敲打( ̄▽ ̄)"