【自定義控件系列三】android畫圖類---Path淺談


概要:

本人在目前項目中很多頁面都需要自定義控件,所以抽出時間對自定義控件進行系統的複習,並對此發表一下本人的拙見,也方便今後複習。


學習之前先看一下,這次分享最終要做的自定義控件吧,整張圖除了中間的文字是TextView 其他的都是畫出來的,而且圓指向柱狀體頂部的箭頭是

通過計算出來位置後畫出來的。這個Demo我會在最後一篇文章中進行分享



好其他不多說開始這次的學習之旅吧!!!


Path類

首先看一下Path類官方說明

 * 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.

路徑類封裝化合物(多線)的幾何路徑由直線段組成,二次曲線,三次曲線。它可以繪製drawpath(路徑,油漆),任一填充或魔方(基於塗料的風格),或可用於裁剪或畫

(一)獲取Path

Path path = new Path();

(二)Path的API


//扇形路徑,一個橢圓,起始角,扇形角度
		path.addArc(oval, startAngle, sweepAngle);
		
		//正圓路徑
		path.addCircle(x, y, radius, dir);
		
		//畫橢圓
		path.addOval(oval, dir);
		
		//路徑拼接路徑
		path.addPath(src);
		
		//路徑拼接路徑+矩陣
		path.addPath(src, matrix);
		
		//路徑
		path.addPath(src, dx, dy);
		
		//矩形路徑 + 拼接路徑
		path.addRect(rect, dir);
		
		//矩形路徑上下左右 + 拼接路徑
		path.addRect(left, top, right, bottom, dir);
		
		//圓角矩形路徑
		path.addRoundRect(rect, rx, ry, dir);
		
		//圓形矩陣路徑,通過radii數組設置某一個角的弧度
		path.addRoundRect(rect, radii, dir);
		
		//添加指定的弧路徑作爲一個新的輪廓。如果路徑的開始是從不同的電流路徑的最後一點,
		//然後自動lineto()添加連接當前輪廓弧線的開始。然而,如果路徑是空的,那麼我們稱moveto()與圓弧的第一點
		path.arcTo(oval, startAngle, sweepAngle);
		
		//添加指定的弧路徑作爲一個新的輪廓。如果路徑的開始是從不同的電流路徑的最後一點,
		//然後自動lineto()添加連接當前輪廓弧線的開始。然而,如果路徑是空的,那麼我們稱moveto()與圓弧的第一點。360。
		path.arcTo(oval, startAngle, sweepAngle, forceMoveTo);
		
		//使最後一個點與第一個點閉合
		path.close();
		
		//計算路徑的控制點的範圍,並把答案寫在界限。如果路徑中包含0或1點,邊界設置爲(0,0,0,0)
		path.computeBounds(bounds, exact);
		
		//添加一個三次Bezier從最後一點,接近控制點(X1,Y1),(X2,Y2),
		//和結束(X3,Y3)。如果沒有moveto()調用了這個輪廓,第一點是自動設定爲(0,0)
		path.cubicTo(x1, y1, x2, y2, x3, y3);
		
		//返回路徑的填充類型
		path.getFillType();
		
		//提示路徑準備加入更多的點。這可以讓道路更有效地分配存儲
		path.incReserve(extraPtCount);
		
		//判斷路徑是否爲空
		path.isEmpty();
		
		//如果filltype是反向變異返回true
		path.isInverseFillType();
		
		//如果路徑指定一個矩形返回true。如果是這樣的話,如果參數不爲空,設置正確的路徑的界限。如果路徑不指定一個矩形,矩形和忽略返回false。
		path.isRect(rect);
		
		//添加了最後一點線指定點(x,y)。如果沒有moveto()調用了這個輪廓,第一點是自動設定爲(0,0)。
		path.lineTo(x, y);
		
		//設置的下一個路徑的開始點(x,y)。
		path.moveTo(x, y);
		
		//抵消(dx,dy)的路徑,成功返回TRUE
		path.offset(dx, dy);
		
		//抵消(dx,dy)的路徑,成功返回TRUE
		path.offset(dx, dy, dst);
		
		path.op(path, op);
		path.op(path1, path2, op);
		
		//增加二次Bezier從最後一點,接近控制點(X1,Y1),(X2,Y2和結束)。
		//如果沒有moveto()調用了這個輪廓,第一點是自動設定爲(0,0)。
		path.quadTo(x1, y1, x2, y2);
		
		//cubicto相同,但座標認爲相對於當前點的輪廓。如果沒有以前的點,然後移動到(0,0)是自動插入。
		path.rCubicTo(x1, y1, x2, y2, x3, y3);
		
		//從路徑中的任何直線和曲線,使空。這並不改變填充類型設置。
		path.reset();
		
		//倒回路徑:清除所有的直線和曲線的路徑,但保持內部數據結構更快的重用。
		path.rewind();
		
		//同LineTo,但座標認爲相對於這個輪廓上點。如果沒有以前的點,然後移動到(0,0)是自動插入。
		path.rLineTo(dx, dy);
		
		//組相對於以前的輪廓上下點輪廓開始。如果沒有以前的輪廓,這被視爲moveto()相同。
		path.rMoveTo(dx, dy);
		
		//quadto相同,但座標認爲相對於這個輪廓上點。如果沒有以前的點,然後移動到(0,0)是自動插入。
		path.rQuadTo(dx1, dy1, dx2, dy2);
		
		//SRC的內容替換的內容。
		path.set(src);
		
		//設置路徑的填充類型
		path.setFillType(ft);
		
		//設置路徑最後一定的位置
		path.setLastPoint(dx, dy);
		
		//切換的filltype逆狀態
		path.toggleInverseFillType();
		
		//點此路徑的變換矩陣。
		path.transform(matrix);
		
		//變換的點在該路徑的矩陣,並把答案寫在DST。如果測試是無效的,那麼原來的路徑修改。
		path.transform(matrix, dst);





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章