標籤:android style blog http ar io color os sp
剪下地區也稱為可視地區,是由畫布進行設定的;它指的是在畫布上設定一塊地區,當畫布一旦設定了可視地區,那麼除此地區外,繪製的任何內容都將看不到;可視地區可以是圓形、矩形等等。
畫布提供了三種設定可視地區的方法。
1.通過座標,設定矩形可視地區
clipRect(int left,int top,int right,int bottom)
作用:為畫布設定矩形可視地區
第一、二個參數:為可視地區的左上方
第三、四個參數:為可視地區的右下角
2.利用 Path 來設定可視地區的形狀
clipPath(Path path)
作用:為畫布設定可視地區
參數:Path執行個體
3.利用 Region 來對畫布設定可視地區
clipRegion(Region region)
作用:為畫布設定可視地區
參數:Region 執行個體
Region 表示地區的集合,所以它可以設定多個地區塊,而且可以通過這些地區塊之間的關係來處理一些問題;比如 Region 設定它所有地區塊相交的地區是否可見、設定相交地區只讓交集顯示等等。
Region 常用函數:
op(Rect rect,Op op)
作用:設定地區塊
第一個參數:Rect 執行個體
第二個參數:Region.Op 靜態值,表示地區塊的顯示方式。其中地區塊的顯示方式如下:
Region.Op.UNION: 地區全部顯示
Region.Op.INTERSECT:地區的交集顯示
Region.Op.XOR:不顯示交集地區
下面是執行個體示範,如下:
建立新項目,遊戲架構為 SurfaceView 遊戲架構。具體步驟參照“11.遊戲開發基礎(SurfaceView 遊戲架構、View 和 SurfaceView 的區別)”。
修改 MySurfaceView 類中的繪圖函數如下:
private void myDraw() { try { canvas = sfh.lockCanvas(); if (canvas != null) { //通過圖片資源產生一張Bitmap 位元影像 Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.pic01); canvas.save(); canvas.drawText("原圖:", 20, 20, paint); canvas.drawBitmap(bmp, 20, 30,paint); canvas.restore(); canvas.save(); canvas.drawText("通過座標,設定矩形可視地區:", 20, 320, paint); /** * 為畫布設定矩形可視地區 * 第一、二個參數為可視地區的左上方 * 第三、四個參數為可視地區的右下角 */ canvas.clipRect(20,330,bmp.getWidth()+20,bmp.getHeight()/2+330); canvas.drawBitmap(bmp, 20, 330,paint); canvas.restore(); canvas.save(); canvas.drawText("利用 Path 來設定可視地區的形狀,這裡為圓形可視地區:", 20, 620, paint); Path path = new Path(); path.addCircle(20+bmp.getWidth()/2, 630+bmp.getHeight()/2, bmp.getWidth()/2, Direction.CCW); /** * 為畫布設定可視地區 * 參數:Path執行個體 * 利用Paht 可以為位元影像設定任何需要的可視地區,這裡是設定一個圓形可視地區。 */ canvas.clipPath(path); canvas.drawBitmap(bmp, 20, 630, paint); canvas.restore(); canvas.save(); canvas.drawText("利用 Region 來對畫布設定可視地區:", 20, 920, paint); Region region = new Region(); //地區塊全部顯示 region.op(new Rect(20,930,120,1030), Region.Op.UNION); //不顯示交集地區 region.op(new Rect(50,930,100,1080), Region.Op.XOR); canvas.clipRegion(region); canvas.drawBitmap(bmp, 20, 930, paint); canvas.restore(); } } catch (Exception e) { } finally { if (canvas != null) { sfh.unlockCanvasAndPost(canvas); } } }
【讀書筆記《Android遊戲編程之從零開始》】15.遊戲開發基礎(剪下地區)