<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) :::