Android 自定義view Path 類學(xué)習(xí)

概述

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ù)雜的路徑圖形。
  • 枚舉類型的使用可以讓路徑操作更加直觀和靈活。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容