<font style="text-shadow:0px 0px 15px #FF37FD;">Region</font> === ###### tags: `Android developer` `Kotlin` <font color="Brown">android.graphics.Region</font> <font color="Brown">不是用來繪圖,重點是相交操作</font> ## <font color="sandybrown">Nested classes</font> ### <font color="#990DFF">[Op](https://hackmd.io/2YzCqFsDSLO_5lOEm6KRvw?both#REPLACE)</font> ## <font color="sandybrown">Constructors</font> ### <font color="#990DFF">Region()</font> ### <font color="#990DFF">Region(region: Region)</font> ### <font color="#990DFF">Region(r: Rect)</font> ### <font color="#990DFF">Region(left: Int, top: Int, right: Int, bottom: Int)</font> :::warning **Ex:** ```kotlin= val region=Region() Paint().flags=ANTI_ALIAS_FLAG ``` ::: ## <font color="sandybrown">方法</font> ### <font color="#990DFF">setEmpty(): Unit</font> :::info setEmpty(): Unit ::: :::warning **Ex:** ```kotlin= // 間接構造 val region=Region() region.setEmpty() ``` ::: ### <font color="#990DFF">set(region: Region): Boolean</font> :::info 將區域設置為指定區域。 ::: :::success **參數** region : 此值絕不能是null。 ::: ### <font color="#990DFF">set(r: Rect): Boolean</font> :::info 將區域設置為指定的矩形 ::: :::success **參數** r : 此值絕不能是null。 ::: ### <font color="#990DFF">set(left: Int, top: Int, right: Int, bottom: Int): Boolean</font> :::info 將區域設置為指定的矩形 ::: ### <font color="#990DFF">setPath(path: Path, clip: Region): Boolean</font> :::info 將區域設置為路徑和剪輯描述的區域。如果結果區域非空,則返回true。這會產生一個與路徑繪製的像素相同的區域(沒有抗鋸齒)。 ::: :::success **參數** path : 此值絕不能是null。 clip : 此值絕不能是null。 ::: :::warning **Ex:** ```kotlin= val ovalPath=Path() ovalPath.addOval(50f,50f,200f,500f,Path.Direction.CCW) val region=Region() region.setPath(ovalPath,Region(50,50,200,200)) canvas?.drawTextOnPath(string,circlePath2,80f,30f,paint) ``` ::: ### <font color="#990DFF">union(r: Rect): Boolean</font> :::info 聯集 ::: :::success **參數** r : 這個值絕對不能null。 ::: :::warning **Ex:** ```kotlin= val paint = Paint().apply { color = Color.RED style = Paint.Style.FILL } val region = Region(10, 10, 200, 100) region.union(Rect(10, 10, 50, 300)) val regionIterator=RegionIterator(region) val rect=Rect() while (regionIterator.next(rect)){ canvas?.drawRect(rect,paint) } ``` :::danger **輸出結果 :** ![](https://i.imgur.com/76pMEgv.png) ::: ### <font color="#990DFF">op(r: Rect, op: Region.Op): Boolean</font> :::info 在此區域和指定的rect上執行指定的Op。如果op的結果不為空,則返回true。 ::: :::success **參數** r : 這個值絕對不能null。 op : 這個值絕對不能null。 ::: :::warning **Ex:** ```kotlin= // 最終區域為 region1 與 region2 不相同的區域 region1.op(region2, Region.Op.DIFFERENCE) // 最終區域為 region1 與 region2 相交的區域 region1.op(region2, Region.Op.INTERSECT) // 最終區域為 region2 區域 region1.op(region2, Region.Op.REPLACE) // 最終區域為 region2 與 region1 不相同的區域 region1.op(region2, Region.Op.REVERSE_DIFFERENCE) // 最終區域為 region1 與 region2 組合在一起的區域 region1.op(region2, Region.Op.UNION) // 最終區域為 region1 與 region2 相交以外的區域 region1.op(region2, Region.Op.XOR) ``` :::danger **輸出結果 :** ![](https://i.imgur.com/32AZaXd.png) ::: ### <font color="#990DFF">isEmpty(): Boolean</font> :::info 如果此區域為空,則返回true ::: ### <font color="#990DFF">isRect(): Boolean</font> :::info 如果區域包含單個矩形,則返回true ::: ### <font color="#990DFF">isComplex(): Boolean</font> :::info 如果區域包含多個矩形,則返回true ::: ### <font color="#990DFF">getBounds(): Rect</font> :::info 將新的Rect集返回到區域的邊界。如果該區域為空,則Rect將設置為[0,0,0,0] ::: ### <font color="#990DFF">getBounds(r: Rect): Boolean</font> :::info 將Rect設置為區域的邊界。如果該區域為空,則Rect將設置為[0,0,0,0] ::: :::success **參數** r : 這個值絕對不能null。 ::: ### <font color="#990DFF">getBoundaryPath(): Path</font> :::info 返回區域的邊界作為新路徑。如果該區域為空,則路徑也將為空。 ::: ### <font color="#990DFF">getBoundaryPath(path: Path): Boolean</font> :::info 設置區域邊界的路徑。如果該區域為空,則路徑也將為空。 ::: :::success **參數** path : 這個值絕對不能null。 ::: ### <font color="#990DFF">contains(x: Int, y: Int): Boolean</font> :::info 如果區域包含指定的點,則返回true ::: ### <font color="#990DFF">quickContains(r: Rect): Boolean</font> :::info 如果區域是單個矩形(不復雜)並且它包含指定的矩形,則返回true。返回false並不能保證此區域不包含矩形,但返回true則保證該區域包含矩形。 ::: :::success **參數** r : 這個值絕對不能null。 ::: ### <font color="#990DFF">quickContains(left: Int, top: Int, right: Int, bottom: Int): Boolean</font> :::info 如果區域是單個矩形(不復雜)並且它包含指定的矩形,則返回true。返回false並不能保證此區域不包含矩形,但返回true則保證該區域包含矩形。 ::: ### <font color="#990DFF">quickReject(r: Rect): Boolean</font> :::info 如果區域為空,或者指定的矩形與區域不相交,則返回true。返回false並不能保證它們相交,但返回true則保證它們不相交。 ::: :::success **參數** r : 這個值絕對不能null。 ::: ### <font color="#990DFF">quickReject(left: Int, top: Int, right: Int, bottom: Int): Boolean</font> :::info 如果區域為空,或者指定的矩形與區域不相交,則返回true。返回false並不能保證它們相交,但返回true則保證它們不相交。 ::: ### <font color="#990DFF">quickReject(rgn: Region!): Boolean</font> :::info 如果區域為空,或者指定的區域與區域不相交,則返回true。返回false並不能保證它們相交,但返回true則保證它們不相交。 ::: ### <font color="#990DFF">translate(dx: Int, dy: Int): Unit</font> :::info 該函數用於將 Region 向 X 軸平移 dx 距離,向 Y 軸平移 dy 距離,將結果返回 ::: ### <font color="#990DFF">translate(dx: Int, dy: Int, dst: Region!): Unit</font> :::info 該函數用於將 Region 向 X 軸平移 dx 距離,向 Y 軸平移 dy 距離,將結果給 dst,而當前值保持不變。 :::