- Android游戲開(kāi)發(fā)技術(shù)實(shí)戰(zhàn)詳解
- 褚尚軍 張加春編著
- 939字
- 2018-12-30 05:33:21
4.5 使用矩形類Rect
類Rect的完整形式是Android.Graphics.Rect,功能是繪制矩形區(qū)域。Rect除了能夠表示一個(gè)矩形區(qū)域的位置描述,還可以幫助計(jì)算圖形之間是否碰撞(具有包含關(guān)系),對(duì)于Android游戲開(kāi)發(fā)比較有用。在類Rect的主要成員中包含了如下3種重載方法來(lái)判斷包含關(guān)系。
· boolean contains(int left, int top, int right, int bottom)
· boolean contains(int x, int y)
· boolean contains(Rect r)
實(shí)例4-4 在Android中使用Rect類(daima\4\RectCH)。
本實(shí)例實(shí)現(xiàn)文件RectCH.java的主要代碼如下所示。
/* 聲明Paint對(duì)象 */ private Paint mPaint = null; private RectCH_1 mGameView2 = null; public RectCH(Context context) { super(context); /* 構(gòu)建對(duì)象 */ mPaint = new Paint(); mGameView2 = new RectCH_1(context); /* 開(kāi)啟線程 */ new Thread(this).start(); } public void onDraw(Canvas canvas) { super.onDraw(canvas); /* 設(shè)置畫布為黑色背景 */ canvas.drawColor(Color.BLACK); /* 取消鋸齒 */ mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); { /* 定義矩形對(duì)象 */ Rect rect1 = new Rect(); /* 設(shè)置矩形大小 */ rect1.left = 5; rect1.top = 5; rect1.bottom = 25; rect1.right = 45; mPaint.setColor(Color.BLUE); /* 繪制矩形 */ canvas.drawRect(rect1, mPaint); mPaint.setColor(Color.RED); /* 繪制矩形 */ canvas.drawRect(50, 5, 90, 25, mPaint); mPaint.setColor(Color.YELLOW); /* 繪制圓形(圓心x,圓心y,半徑r,p) */ canvas.drawCircle(40, 70, 30, mPaint); /* 定義橢圓對(duì)象 */ RectF rectf1 = new RectF(); /* 設(shè)置橢圓大小 */ rectf1.left = 80; rectf1.top = 30; rectf1.right = 120; rectf1.bottom = 70; mPaint.setColor(Color.LTGRAY); /* 繪制橢圓 */ canvas.drawOval(rectf1, mPaint); /* 繪制多邊形 */ Path path1 = new Path(); /*設(shè)置多邊形的點(diǎn)*/ path1.moveTo(150+5, 80-50); path1.lineTo(150+45, 80-50); path1.lineTo(150+30, 120-50); path1.lineTo(150+20, 120-50); /* 使這些點(diǎn)構(gòu)成封閉的多邊形 */ path1.close(); mPaint.setColor(Color.GRAY); /* 繪制這個(gè)多邊形 */ canvas.drawPath(path1, mPaint); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(3); /* 繪制直線 */ canvas.drawLine(5, 110, 315, 110, mPaint); } // //下面繪制實(shí)心幾何體 // mPaint.setStyle(Paint.Style.FILL); { /* 定義矩形對(duì)象 */ Rect rect1 = new Rect(); /* 設(shè)置矩形大小 */ rect1.left = 5; rect1.top = 130+5; rect1.bottom = 130+25; rect1.right = 45; mPaint.setColor(Color.BLUE); /* 繪制矩形 */ canvas.drawRect(rect1, mPaint); mPaint.setColor(Color.RED); /* 繪制矩形 */ canvas.drawRect(50, 130+5, 90, 130+25, mPaint); mPaint.setColor(Color.YELLOW); /* 繪制圓形(圓心x,圓心y,半徑r,p) */ canvas.drawCircle(40, 130+70, 30, mPaint); /* 定義橢圓對(duì)象 */ RectF rectf1 = new RectF(); /* 設(shè)置橢圓大小 */ rectf1.left = 80; rectf1.top = 130+30; rectf1.right = 120; rectf1.bottom = 130+70; mPaint.setColor(Color.LTGRAY); /* 繪制橢圓 */ canvas.drawOval(rectf1, mPaint); /* 繪制多邊形 */ Path path1 = new Path(); /*設(shè)置多邊形的點(diǎn)*/ path1.moveTo(150+5, 130+80-50); path1.lineTo(150+45, 130+80-50); path1.lineTo(150+30, 130+120-50); path1.lineTo(150+20, 130+120-50); /* 使這些點(diǎn)構(gòu)成封閉的多邊形 */ path1.close(); mPaint.setColor(Color.GRAY); /* 繪制這個(gè)多邊形 */ canvas.drawPath(path1, mPaint); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(3); /* 繪制直線 */ canvas.drawLine(5, 130+110, 315, 130+110, mPaint); } /* 通過(guò)ShapeDrawable來(lái)繪制幾何圖形 */ mGameView2.DrawShape(canvas); } //觸筆事件 public boolean onTouchEvent(MotionEvent event) { return true; } //按鍵按下事件 public boolean onKeyDown(int keyCode, KeyEvent event) { return true; } //按鍵彈起事件 public boolean onKeyUp(int keyCode, KeyEvent event) { return false; } public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { return true; } public void run() { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } //使用postInvalidate可以直接在線程中更新界面 postInvalidate(); } } }
執(zhí)行后的效果如圖4-4所示。

圖4-4 執(zhí)行效果
注意:在Android系統(tǒng)中,還有另外一個(gè)類和Rect的功能相似,即Region。類Region的完整寫法是Android. Graphics.Region,此類在Android平臺(tái)中表示的區(qū)域和Rect表示的不同。Region類表示的是一個(gè)不規(guī)則的樣式,可以是橢圓、多邊形,等等,而Rect類表示的僅僅是矩形。同樣,Region的boolean contains(int x, int y)成員可以判斷一個(gè)點(diǎn)是否在該區(qū)域內(nèi)。
推薦閱讀
- Application Development with Qt Creator(Second Edition)
- 物聯(lián)網(wǎng)智慧安監(jiān)技術(shù)
- 走進(jìn)物聯(lián)網(wǎng)
- Learning Karaf Cellar
- 物聯(lián)網(wǎng)之霧:基于霧計(jì)算的智能硬件快速反應(yīng)與安全控制
- WordPress Web Application Development
- Unity Artificial Intelligence Programming
- 面向5G-Advanced的關(guān)鍵技術(shù)
- jQuery Mobile Web Development Essentials
- 局域網(wǎng)組成實(shí)踐
- 全聯(lián)網(wǎng)標(biāo)識(shí)服務(wù)
- 精通SEO:100%網(wǎng)站流量提升密碼
- 物聯(lián)網(wǎng)與智慧農(nóng)業(yè)
- 物聯(lián)網(wǎng)與智慧廣電
- 物聯(lián)網(wǎng)商業(yè)設(shè)計(jì)與案例