<font style="text-shadow:0px 0px 15px #FF37FD;">Path</font>
===
###### tags: `Android developer` `Kotlin`
<font color="Brown">android.graphics.Paint</font>
<font color="Brown">封裝了由直線段,二次曲線和三次曲線組成的複合(多個輪廓)幾何路徑。它可以使用canvas.drawPath(path,paint)繪製,可以填充或描邊(基於繪製的樣式),也可以用於剪切或在路徑上繪製文本。</font>
## <font color="sandybrown">Constructors</font>
### <font color="#990DFF">Path( )</font>
### <font color="#990DFF">Path(src: Path?)</font>
## <font color="sandybrown">Nested classes</font>
### <font color="#990DFF">[Direction](https://hackmd.io/gyPzN5NOQaeWzeyAAnnkbQ)</font>
### <font color="#990DFF">[FillType](https://hackmd.io/VLa7LOi6Qw6Kb8uBH6Po2A)</font>
## <font color="sandybrown">方法</font>
### <font color="#990DFF">moveTo(x: Float, y: Float): Unit</font>
:::info
將下一個輪廓的開頭設置為點(x,y)。
:::
:::success
**參數**
x : 新輪廓開始的x坐標
y : 新輪廓開始的y坐標
:::
:::warning
**Ex:**
```kotlin=
val path=Path()
path.moveTo(10f,10f)
```
:::
### <font color="#990DFF">lineTo(x: Float, y: Float): Unit</font>
:::info
從最後一個點到指定點(x,y)添加一條線。如果沒有對此輪廓進行moveTo()調用,則第一個點自動設置為(0,0)。
:::
:::success
**參數**
x : 一條線末端的x坐標
y : 一條線末端的y坐標
:::
:::warning
**Ex:**
```kotlin=
val path=Path()
path.lineTo(10f,100f)
```
:::
### <font color="#990DFF">fun close(): Unit</font>
:::info
關閉當前輪廓。如果當前點不等於輪廓的第一個點,則自動添加線段。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.STROKE
strokeWidth = 5f
}
val path=Path()
path.apply {
moveTo(10f,10f)
lineTo(10f,100f)
lineTo(300f,100f)
close()
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">arcTo(oval: RectF, startAngle: Float, sweepAngle: Float): Unit</font>
:::info
指定的弧作為新輪廓附加到路徑。如果路徑的起點與路徑的當前最後一個點不同,則添加自動lineTo()以將當前輪廓連接到弧的起點。但是,如果路徑為空,那麼我們用弧的第一個點調用moveTo()。
:::
:::success
**參數**
oval : 橢圓的邊界定義弧的形狀和大小這個值絕對不能null。
startAngle : 弧開始的起始角度(以度為單位)
sweepAngle : 順時針測量的掃描角度(以度為單位)
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.GRAY
style=Paint.Style.STROKE
strokeWidth = 5f
}
val path=Path()
val rect=RectF(100f,10f,200f,100f)
canvas?.drawRect(rect,paint)
path.apply {
moveTo(10f,10f)
arcTo(rect,0f,90f)
}
paint.color=Color.RED
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">arcTo(oval: RectF, startAngle: Float, sweepAngle: Float, forceMoveTo: Boolean): Unit</font>
:::info
指定的弧作為新輪廓附加到路徑。如果路徑的起點與路徑的當前最後一個點不同,則添加自動lineTo()以將當前輪廓連接到弧的起點。但是,如果路徑為空,那麼我們用弧的第一個點調用moveTo()。
:::
:::success
**參數**
oval : 橢圓的邊界定義弧的形狀和大小這個值絕對不能null。
startAngle : 弧開始的起始角度(以度為單位)
sweepAngle : 順時針測量的掃描角度(以度為單位)
forceMoveTo : 如果為true,則始終使用弧開始新輪廓
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.GRAY
style=Paint.Style.STROKE
strokeWidth = 5f
}
val path=Path()
val rect=RectF(100f,10f,200f,100f)
canvas?.drawRect(rect,paint)
path.apply {
moveTo(10f,10f)
arcTo(rect,0f,90f, true)
}
paint.color=Color.RED
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">addArc(oval: RectF, startAngle: Float, sweepAngle: Float): Unit</font>
:::info
指定的弧添加到路徑中作為新輪廓。
:::
:::success
**參數**
oval : 定義弧的形狀和大小的橢圓的邊界這個值絕對不能null。
startAngle : 弧開始的起始角度(以度為單位)
sweepAngle : 順時針測量的掃描角度(以度為單位)
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.STROKE
strokeWidth = 5f
}
val path=Path()
val rect=RectF(100f,100f,150f,150f)
path.apply {
moveTo(10f,10f)
lineTo(100f,50f)
addArc(rect,0f,90f)
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">addRect(rect: RectF, dir: Path.Direction): Unit</font>
:::info
在路徑中添加閉合的矩形輪廓
:::
:::success
**參數**
rect : 要添加為路徑的閉合輪廓的矩形此值絕不能為null。
dir : 矩形輪廓的方向此值絕不能為null。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.STROKE
strokeWidth = 5f
}
val CCWPath=Path()
val CCWRect=RectF(50f, 50f, 240f, 200f)
CCWPath.addRect(CCWRect,Path.Direction.CCW)
canvas?.drawPath(CCWPath,paint)
val CWPath=Path()
val CWRect=RectF(290f, 50f, 480f, 200f)
CWPath.addRect(CWRect,Path.Direction.CW)
canvas?.drawPath(CWPath,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">addRoundRect(rect: RectF, radii: FloatArray, dir: Path.Direction): Unit</font>
:::info
在路徑中添加閉合的圓角矩形輪廓。每個角接收兩個半徑值[X,Y]。角落按左上,右上,右下,左下排序
:::
:::success
**參數**
rect : 要添加到路徑的圓角矩形的邊界此值絕不能是null。
radii : 8個值的數組,4對[X,Y]半徑這個值絕對不能null。
dir : 繞圓角矩形輪廓的方向此值絕不能為null。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.STROKE
strokeWidth = 5f
}
val rect=RectF(290f, 50f, 480f, 200f)
val radii= floatArrayOf(10f,15f,20f,25f,30f,35f,40f,45f)
val path=Path().apply {
addRoundRect(rect,radii,Path.Direction.CCW)
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">addRoundRect(rect: RectF, rx: Float, ry: Float, dir: Path.Direction): Unit</font>
:::info
在路徑中添加閉合的圓角矩形輪廓
:::
:::success
**參數**
rect : 要添加到路徑的圓角矩形的邊界此值絕不能是null。
rx : 圓角矩形的圓角的x半徑
ry : 圓角矩形的圓角的y半徑
dir : 繞圓角矩形輪廓的方向此值絕不能為null。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.STROKE
strokeWidth = 5f
}
val rect=RectF(50f, 50f, 240f, 200f)
val path=Path().apply {
addRoundRect(rect,10f,15f,Path.Direction.CCW)
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">addCircle(x: Float, y: Float, radius: Float, dir: Path.Direction): Unit</font>
:::info
在路徑中添加閉合圓形輪廓
:::
:::success
**參數**
x : 要添加到路徑的圓心的x坐標
y : 要添加到路徑的圓心的y坐標
radius : 要添加到路徑的圓的半徑
dir : 繞圓的輪廓的方向此值絕不能是null。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.STROKE
strokeWidth = 5f
}
val path=Path().apply {
addCircle(100f,100f,50f,Path.Direction.CCW)
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">addOval(oval: RectF, dir: Path.Direction): Unit</font>
:::info
在路徑中添加封閉的橢圓形輪廓
:::
:::success
**參數**
oval : 橢圓的邊界,作為閉合輪廓添加到路徑中此值絕不能為null。
dir : 繞橢圓形輪廓的方向此值絕不能為null。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.STROKE
strokeWidth = 5f
}
val rect=RectF(10f,10f,200f,200f)
val path=Path().apply {
addOval(rect,Path.Direction.CCW)
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">reset(): Unit</font>
:::info
清除路徑中的所有線條和曲線,使其變空。這不會更改填充類型設置。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.FILL
strokeWidth = 5f
}
val path=Path().apply {
fillType=Path.FillType.INVERSE_WINDING
reset()
addCircle(100f,100f,50f,Path.Direction.CCW)
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::
### <font color="#990DFF">rewind(): Unit</font>
:::info
回退路徑:清除路徑中的所有行和曲線,但保留內部數據結構以便更快地重用。
:::
:::warning
**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
color = Color.RED
style=Paint.Style.FILL
strokeWidth = 5f
}
val path=Path().apply {
fillType=Path.FillType.INVERSE_WINDING
rewind()
addCircle(100f,100f,50f,Path.Direction.CW)
}
canvas?.drawPath(path,paint)
```
:::danger
**輸出結果 :**

:::