API 參考:Path
Path 類別代表由直線段、二次曲線和三次曲線組成的複雜複合幾何路徑。
注意: 對於構建新路徑,強烈建議使用 PathBuilder,而不是直接在
Path上呼叫方法。PathBuilder提供了更好的流暢 API,並確保生成的Path是不可變的。
構建路徑(靜態工廠方法)
雖然對於複雜路徑更推薦使用 PathBuilder,但 Path 為常見形狀提供了高效的靜態工廠方法。
makeRect(rect):從矩形建立路徑。makeOval(rect):從橢圓建立路徑。makeCircle(x, y, radius):從圓形建立路徑。makeRRect(rrect):從圓角矩形建立路徑。makeLine(p1, p2):從單一線段建立路徑。makePolygon(points, closed):從一系列點建立路徑。makeFromSVGString(svgString):解析 SVG 路徑字串(例如"M10 10 L50 50 Z")。
路徑資訊與度量
getBounds():返回保守的邊界框(快速,已快取)。computeTightBounds():返回精確的邊界框(較慢)。isEmpty():如果路徑不包含任何動詞,則返回 true。isConvex():如果路徑定義了一個凸形狀,則返回 true。isRect():如果路徑代表一個簡單矩形,則返回Rect,否則返回 null。isOval():如果路徑是一個橢圓,則返回邊界Rect,否則返回 null。isFinite():如果路徑中的所有點都是有限的,則返回 true。
點擊測試
contains(x, y):如果指定點在路徑內部(基於目前的填充類型),則返回 true。conservativelyContainsRect(rect):如果矩形肯定在路徑內部,則返回 true(快速拒絕測試)。
布林運算
路徑可以使用邏輯運算進行組合。這些操作會建立一個新的 Path 物件。
java
Path result = Path.makeCombining(pathA, pathB, PathOp.INTERSECT);可用的 PathOp:
DIFFERENCE:A - BINTERSECT:A & BUNION:A | BXOR:(A | B) - (A & B)REVERSE_DIFFERENCE:B - A
變換與修改
這些方法返回一個套用了變換的新 Path 實例。
makeTransform(matrix):將Matrix33套用到路徑中的所有點。makeOffset(dx, dy):平移路徑。makeScale(s):縮放路徑。
插值(變形)
您可以在兩個相容的路徑之間進行插值(適用於動畫)。
java
// 在 pathA 和 pathB 之間插值 50%
if (pathA.isInterpolatable(pathB)) {
Path midPath = pathA.makeInterpolate(pathB, 0.5f);
}序列化
serializeToBytes():將路徑序列化為位元組陣列。makeFromBytes(bytes):從位元組重建路徑。dump():將路徑結構列印到標準輸出(用於除錯)。
測量與迭代
PathMeasure:用於計算路徑長度並沿其長度尋找位置/切線。PathSegmentIterator:允許您迭代構成路徑的個別動詞和點。
範例
java
Path path = new Path()
.moveTo(10, 10)
.lineTo(100, 10)
.lineTo(100, 100)
.quadTo(50, 150, 10, 100)
.closePath();
canvas.drawPath(path, paint);填充類型
填充類型決定了哪些區域在填充操作中被視為路徑的「內部」。
WINDING(預設):使用繞數規則。EVEN_ODD:使用奇偶規則。INVERSE_WINDING:反轉繞數規則(填充外部)。INVERSE_EVEN_ODD:反轉奇偶規則。
視覺範例
請參閱 examples/scenes/src/PathsScene.java 以獲取建立、修改和組合路徑的範例。