一、Android繪制知識(shí)總結(jié)(形狀篇)

1、Rect和RectF

1、contains
判斷當(dāng)前矩形是否包含某個(gè)點(diǎn)或某個(gè)矩形
boolean contains(int x, int y)
boolean contains(int left, int top, int right, int bottom)
boolean contains(Rect r)

2、intersects
判斷兩個(gè)矩形是否相交
static boolean intersects(Rect a, Rect b))
boolean intersects(int left,int top, int right, int bottom)

3、intersect
與intersects不同的是,如果相交,則原Rect會(huì)變成相交部分,否則不變
boolean intersect(int left,int top, int right, int bottom)
boolean intersect(Rect r)

4、union
將某個(gè)點(diǎn)或矩形跟當(dāng)前矩形合并成一個(gè)更大的矩形
boolean union(int left,int top, int right, int bottom)
boolean union(Rect r)
boolean union(int x, int y)


2、Region

1、基本介紹

Region(區(qū)域):即一塊任意形狀的封閉圖形。一般來說,它使用的頻率比較少,它常用于區(qū)域運(yùn)行,并不是繪制。

//構(gòu)造方法:
public Region()
public Region(Region region)
public Region(Rect r)
public Region(int left, int top, int right, int bottom)

//其余方法
public boolean setEmpty()
public boolean set(Region region)
public boolean set(Rect r)
public boolean set(int left, int top, int right, int bottom)

//clip與path取交集,結(jié)果賦值給調(diào)用者
public boolean setPath(Path path, Region clip)

當(dāng)需要繪制Region時(shí),就要調(diào)用RegionIterator類,它可以將Region用無數(shù)個(gè)矩形來近似。

private void drawRegion(Canvas canvas, Region region, Paint paint) {
    RegionIterator iterator = new RegionIterator(region);
    Rect rect = new Rect();
    while (iterator.next(rect)) {
        canvas.drawRect(rect, paint);
    }
}

2、區(qū)域操作

1、union
boolean union(Rect r)
當(dāng)前Region與Rect取交集,并將結(jié)果存入自身。

2、op
這是一個(gè)更靈活的方法,它用當(dāng)前的Region對(duì)象與指定的Rect對(duì)象/Region對(duì)象執(zhí)行相交操作,并將結(jié)果賦值給當(dāng)前的Region對(duì)象。

public boolean op(Rect r, Op op)
public boolean op(int left, int top, int right, int bottom, Op op)
public boolean op(Region region, Op op)
public boolean op(Rect rect, Region region, Op op)
public boolean op(Region region1,  Region region2, Op op)

Op是一個(gè)枚舉類型,我們通過指定不同的Op,可以達(dá)到以下6種不同的效果:
注意:以下圖形是通過 HRegion.op(VRegion) 得到的結(jié)果

HRegion.op(VRegion)

3、getBoundXXX函數(shù)
getBoundXXX函數(shù)用于返回一個(gè)Region的邊界。其中g(shù)etBounds()返回Region最小的外接矩形:
Rect getBounds ()
boolean getBounds (Rect r)
而getBoundaryPath()返回Region的外邊界Path:
Path getBoundaryPath()
boolean getBoundaryPath(Path path)

4、是否包含
Region中仍存在一系列的判斷是否包含某個(gè)點(diǎn)或某個(gè)矩形的函數(shù)。
public boolean contains (int X, int y) ;
該函數(shù)用于判斷該區(qū)域是否包含某個(gè)點(diǎn)。
public boolean quickContains (Rect r)
public boolean quickContains (int left, int top, int right, int bottom)
這兩個(gè)函數(shù)用于判斷該區(qū)域是否包含某個(gè)矩形。

5、是否相交
public boolean quickReject (Rect r)
public boolean quickReject (int left, int top, int right, int bottom) ;
這兩個(gè)函數(shù)用于判斷該區(qū)域是否沒有和指定矩形相交。
public boolean quickReject (Region rgn) ;
該函數(shù)用于判斷該區(qū)域是否沒有和指定區(qū)域相交。

6、平移變換
public void translate (int dx, int dy)
該函數(shù)用于將Region對(duì)象向X軸平移dx距離,向Y軸平移dy距離,并將結(jié)果賦給當(dāng)前
的Region對(duì)象。
public void translate (int dx, int dy, Region dst) ;
該函數(shù)用于將Region對(duì)象向X軸平移dx距離,向Y軸平移dy距離。與上一個(gè)函數(shù)不同
的是,該函數(shù)將結(jié)果賦給dst對(duì)象,而當(dāng)前Region對(duì)象的值保持不變。

7、其余方法

函數(shù) 解釋
boolean isEmpty() 判斷該區(qū)域是否為空
boolean isRect() 判斷該區(qū)域是否是一個(gè)矩陣
boolean isComplex() 判斷該區(qū)域是否是多個(gè)矩陣的組合
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.畫筆 Paint paint.setAntiAlias(true);//抗鋸齒 paint.setColor...
    Small_Cake閱讀 1,070評(píng)論 0 2
  • 本篇博客是我對(duì)View的繪圖方面的理解和歸納,也不會(huì)說的非常的細(xì),只是類似于一個(gè)思維導(dǎo)圖的作用,因?yàn)橛腥藢懙酶昧?..
    PuHJ閱讀 1,791評(píng)論 0 2
  • Paint類 setAlpha(int a) 透明度 setColor(int color)設(shè)置顏色值 setAn...
    wdply閱讀 1,132評(píng)論 0 0
  • 沒有機(jī)會(huì)照正面的你,只能在旁邊或是后面,搶一張側(cè)面的風(fēng)景。 這天喝醉了,是不是嚇到你了? 你在欣賞花樣的時(shí)候,你忘...
    東升黑志閱讀 271評(píng)論 0 0
  • 又是忙碌的一天,不懂的真心得問peter,堅(jiān)決執(zhí)行先生的意愿,及時(shí)溝通,找到解決問題的方法,又受教了,捋順事情,讓...
    冰咋吃閱讀 168評(píng)論 0 3

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