概述
Android 的 Path 類是用于創(chuàng)建和操作二維矢量路徑的工具。它支持直線、二次曲線、三次曲線等基本圖形元素,并且可以進(jìn)行各種邏輯操作,如合并、相交、相減等。以下是 Path 類的一些核心概念和操作方法。
構(gòu)造方法
-
Path(): 創(chuàng)建一個(gè)新的空路徑。 -
Path(Path src): 基于已有的Path對象創(chuàng)建一個(gè)新的路徑。
枚舉類型
Op
-
DIFFERENCE: 差集操作。 -
INTERSECT: 交集操作。 -
UNION: 并集操作。 -
XOR: 異或操作。 -
REVERSE_DIFFERENCE: 反向差集操作。
FillType
填充類型,決定路徑的“內(nèi)部”如何計(jì)算。
-
WINDING: 非零環(huán)繞數(shù)規(guī)則。 -
EVEN_ODD: 奇偶環(huán)繞數(shù)規(guī)則。 -
INVERSE_WINDING: 反向非零環(huán)繞數(shù)規(guī)則。 -
INVERSE_EVEN_ODD: 反向奇偶環(huán)繞數(shù)規(guī)則。
Direction
定義路徑的走向方向。
-
CW: 順時(shí)針方向。 -
CCW: 逆時(shí)針方向。
基礎(chǔ)操作
-
reset(): 清除路徑上的所有線條和曲線,但保留填充類型。 -
rewind(): 清除路徑上的所有線條和曲線,但不保留任何狀態(tài)信息。
路徑操作
-
op(Path path, Op op): 對當(dāng)前路徑和另一個(gè)路徑執(zhí)行邏輯操作。 -
op(Path path1, Path path2, Op op): 對兩個(gè)路徑執(zhí)行邏輯操作。
路徑狀態(tài)檢查
-
isEmpty(): 檢查路徑是否為空。 -
isRect(RectF rect): 檢查路徑是否為矩形,并返回矩形的邊界。
路徑點(diǎn)操作
不帶r的方法是基于原點(diǎn)的坐標(biāo)系(moveTo)
帶r的方法是基于當(dāng)前點(diǎn)的坐標(biāo)系(rMoveTo)
-
incReserve(int extraPtCount): 提示路徑為添加更多點(diǎn)做準(zhǔn)備,以更高效地分配存儲(chǔ)空間。 -
moveTo(float x, float y): 設(shè)置下一個(gè)輪廓的起點(diǎn)。 -
setLastPoint (float dx, float dy):是重置上一次操作的最后一個(gè)點(diǎn) -
rMoveTo(float dx, float dy): 相對于上一個(gè)輪廓的終點(diǎn)設(shè)置下一個(gè)輪廓的起點(diǎn)。 -
lineTo(float x, float y): 添加一條從最后一個(gè)點(diǎn)到指定點(diǎn)的直線。 -
rLineTo(float dx, float dy): 相對于上一個(gè)點(diǎn)添加一條直線。 -
quadTo(float x1, float y1, float x2, float y2): 添加一個(gè)二次貝塞爾曲線。 -
rQuadTo(float dx1, float dy1, float dx2, float dy2): 相對于上一個(gè)點(diǎn)添加一個(gè)二次貝塞爾曲線。 -
cubicTo(float x1, float y1, float x2, float y2, float x3, float y3): 添加一個(gè)三次貝塞爾曲線。 -
rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3): 相對于上一個(gè)點(diǎn)添加一個(gè)三次貝塞爾曲線。 -
close ():連接當(dāng)前最后一個(gè)點(diǎn)和最初的一個(gè)點(diǎn)(如果兩個(gè)點(diǎn)不重合的話),最終形成一個(gè)封閉的圖形。
弧和圓
這里RectF 中的起點(diǎn)是三點(diǎn)鐘方向
-
arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo): 添加一個(gè)弧線。(如果圓弧的七點(diǎn)和上次最后一個(gè)坐標(biāo)不同就連接兩點(diǎn)) -
addArc (RectF oval, float startAngle, float sweepAngle):添加一個(gè)圓?。ㄖ苯犹砑訄A弧) -
addOval(RectF oval, Direction dir): 添加一個(gè)橢圓形狀。 -
addCircle(float x, float y, float radius, Direction dir): 添加一個(gè)圓形。
矩陣
-
addRect (float left, float top, float right, float bottom, Path.Direction dir):添加矩陣 -
addRect (RectF rect, Path.Direction dir):添加矩陣
路徑轉(zhuǎn)換
-
offset(float dx, float dy): 將路徑偏移指定的距離。 -
transform(Matrix matrix): 應(yīng)用矩陣變換到路徑上。
其他方法
-
addPath(Path src): 將另一個(gè)路徑添加到當(dāng)前路徑。 -
computeBounds(RectF bounds, boolean exact): 計(jì)算路徑的邊界。
注意事項(xiàng)
- 使用
Path類時(shí),需要注意路徑的走向方向,尤其是在創(chuàng)建封閉形狀時(shí)。 -
Path類提供的方法可以組合使用,創(chuàng)建復(fù)雜的路徑圖形。 - 枚舉類型的使用可以讓路徑操作更加直觀和靈活。