---
# System prepended metadata

title: '<font style="text-shadow:0px 0px 15px #FF37FD;">Rect</font>'
tags: [Kotlin, Android developer]

---

<font style="text-shadow:0px 0px 15px #FF37FD;">Rect</font>
===
###### tags: `Android developer` `Kotlin`
 <font color="Brown">android.graphics.Rect</font>
 
 <font color="Brown">Rect為矩形保存四個**整數**坐標。矩形由其4條邊（左，上，右，下）的坐標表示。可以直接訪問這些字段。使用width（）和height（）來檢索矩形的寬度和高度。注意：大多數方法都不檢查坐標是否正確排序（即左<=右和頂<=底）。

請注意，右側和底部坐標是獨占的。這意味著一個Rect被繪製到一個未轉換到一個android.graphics.Canvas將繪製到由其左和右坐標描述的列和行，而不是它的底部和右邊的那些。</font>
 
## <font color="sandybrown">Constructors</font>

### <font color="#990DFF">Rect( )</font>
### <font color="#990DFF">Rect(left: Int, top: Int, right: Int, bottom: Int)</font>
### <font color="#990DFF">Rect(r: Rect?)</font>

:::warning

**Ex:**
```kotlin=
// 間接構造
val rect=Rect()
rect.set(10,10,100,100)
// 直接構造
val rect=Rect(10,10,100,100)
```
  
:::



## <font color="sandybrown">方法</font>
### <font color="#990DFF">contains(x: Int, y: Int): Boolean</font>

:::info
如果（x，y）在矩形內，則返回true。左側和頂部被認為是內側，而右側和下側則不是。這意味著對於ax，y包含：left <= x <right和top <= y <bottom。空矩形永遠不會包含任何點。
:::

:::success
**參數**
x : 要測試包含的點的X坐標
Y : 要測試包含的點的Y坐標
:::

:::warning

**Ex:**
```kotlin=
var rect= Rect(100, 10, 300, 100)
Log.d("Contains", "onDraw: ${rect.contains(50,50)}")
```
:::danger
**輸出結果 :**
![](https://i.imgur.com/QuhzjwY.png)

:::

### <font color="#990DFF">contains(left: Int, top: Int, right: Int, bottom: Int): Boolean</font>

:::info
如果矩形的4個指定邊在此矩形內或等於此矩形，則返回true。即，此矩形是指定矩形的超集。空矩形永遠不會包含另一個矩形。
:::

:::success
**參數**
left : 正在測試包含矩形的左側
top : 正在測試包含的矩形的頂部
right : 正在測試包圍的矩形的右側
bottom : 正在測試包含的矩形底部
:::

:::warning

**Ex:**
```kotlin=
var rect= Rect(100, 10, 300, 100)
Log.d("Contains", "onDraw: ${rect.contains(0,0,50,50)}")
```
:::danger
**輸出結果 :**
![](https://i.imgur.com/ELkkiz3.png)

:::

### <font color="#990DFF">contains(r: Rect): Boolean</font>

:::info
如果指定的矩形r在此矩形內部或等於此矩形，則返回true。空矩形永遠不會包含另一個矩形。。
:::

:::success
**參數**
r : 正在測試包含的矩形。絕不能是這個值null。
:::

:::warning

**Ex:**
```kotlin=
var rect= Rect(100, 10, 300, 100)
Log.d("Contains", "onDraw: ${rect.contains(Rect(0, 0, 50, 50))}")
```
:::

### <font color="#990DFF">static fun intersects(a: Rect, b: Rect): Boolean</font>

:::info
如果兩個指定的矩形相交，則返回true。
:::

:::success
**參數**
a : 要為交集測試的第一個矩形，該值絕不能是null。
b : 要測試交集的第二個矩形此值絕不能是null。
:::

:::warning

**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
            color = Color.RED
            style=Paint.Style.STROKE
            strokeWidth = 5f
        }
val rect_1=Rect(10,10,200,200)
val rect_2=Rect(190,10,250,200)
val rect_3=Rect(10,210,200,300)
canvas?.drawRect(rect_1,paint)
paint.color=Color.GREEN
canvas?.drawRect( rect_2,paint)
paint.color=Color.BLUE
canvas?.drawRect(rect_3 ,paint)
Log.d("intersects", "onDraw: ${Rect.intersects(rect_1,rect_2)}")
Log.d("intersects", "onDraw: ${Rect.intersects(rect_1,rect_3)}")
```
:::danger
**輸出結果 :**
![](https://i.imgur.com/OagiZSz.png)

D/intersects: onDraw: true
D/intersects: onDraw: false
:::

### <font color="#990DFF">intersects(left: Int, top: Int, right: Int, bottom: Int): Boolean</font>

:::info
如果此矩形與指定的矩形相交，則返回true。
:::

:::success
**參數**
left : 正在測試交叉點的矩形的左側
top : 正在測試交叉點的矩形頂部
right : 正在測試交叉點的矩形的右側
bottom : 正在測試交叉點的矩形的底部
:::

:::warning

**Ex:**
```kotlin=
val rect_1=Rect(10,10,200,200)
Log.d("intersects", "onDraw: ${rect_1.intersects(190,10,250,200)}")
```
:::

### <font color="#990DFF">intersect(left: Int, top: Int, right: Int, bottom: Int): Boolean</font>

:::info
如果由left，top，right，bottom指定的矩形與此矩形相交，則返回true並將此矩形設置為該交集，否則返回false並且不更改此矩形。不檢查是否有任何矩形為空。
:::

:::success
**參數**
left : 矩形的左側與此矩形相交
top : 矩形的頂部與此矩形相交
right : 矩形的右側與此矩形相交
bottom : 矩形的底部與此矩形相交
:::

:::warning

**Ex:**
```kotlin=
val rect_1=Rect(10,10,200,200)
// 相交部分不會賦予值給rect_1 結果->true
val result_1=rect_1.intersects(190,10,250,200)
Log.d("intersects", "onDraw: $result_1 / $rect_1")
// 未相交部分 結果->false
val result_2=rect_1.intersect(210, 10, 250, 200)
Log.d("intersects", "onDraw: $result_2 / $rect_1")
// 相交部分會賦予值給rect_1 結果->true
val result_3=rect_1.intersect(190, 10, 250, 200)
Log.d("intersects", "onDraw: $result_3 / $rect_1")
```
:::danger
**輸出結果 :**
D/intersects: onDraw: true / Rect(10, 10 - 200, 200)
D/intersects: onDraw: false / Rect(10, 10 - 200, 200)
D/intersects: onDraw: true / Rect(190, 10 - 200, 200)
:::

### <font color="#990DFF">union(left: Int, top: Int, right: Int, bottom: Int): Unit</font>

:::info
合併兩個矩形，不論是否有相交，取得兩個矩形最小左上角的點作為結果矩形的左上角點，取兩個矩形最大右下角點作為結果矩形的右下角點
:::

:::success
**參數**
left : 左邊緣與此矩形聯合
top : 頂部邊緣與此矩形結合在一起
right : 右邊緣與此矩形結合
bottom : 底邊與此矩形結合
:::

:::warning

**Ex:**
```kotlin=
var paint: Paint = Paint().apply {
            color = Color.RED
            style=Paint.Style.STROKE
            strokeWidth = 5f
        }
val rect_1=Rect(100,100,120,120)
val rect_2=Rect(200,200,220,220)
canvas?.drawRect(rect_1,paint)
paint.color=Color.GREEN
canvas?.drawRect(rect_2,paint)
paint.color=Color.BLUE
rect_1.union(rect_2)
canvas?.drawRect(rect_1,paint)
```
:::danger
**輸出結果 :**
![](https://i.imgur.com/cPAvxb8.png)
:::

### <font color="#990DFF">union(x: Int, y: Int): Unit</font>

:::info
判斷矩形與點的相對位置，如果點沒有與矩形相交，則會取點與矩形的聯集，如果點在矩形裡面則取得矩形的左上右下座標
:::

:::success
**參數**
x : 要添加到矩形的點的x坐標
y : 要添加到矩形的點的y坐標
:::

:::warning

**Ex:**
```kotlin=
 var paint: Paint = Paint().apply {
            color = Color.RED
            style=Paint.Style.STROKE
            strokeWidth = 5f
        }
val rect_1=Rect(100,100,120,120)
canvas?.drawRect(rect_1,paint)
paint.color=Color.BLUE
rect_1.union(50,50)
paint.color=Color.GREEN
canvas?.drawPoint(50f,50f,paint)

paint.color=Color.RED
val rect_2=Rect(200,50,220,70)
canvas?.drawRect(rect_2,paint)
paint.color=Color.BLUE
rect_2.union(270,120)
canvas?.drawRect(rect_2,paint)
paint.color=Color.GREEN
canvas?.drawPoint(270f,120f,paint)
```
:::danger
**輸出結果 :**
![](https://i.imgur.com/o5etqZx.png)
:::