官术网_书友最值得收藏!

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

主站蜘蛛池模板: 喀喇沁旗| 澎湖县| 都安| 德化县| 张家口市| 黑水县| 广丰县| 阳曲县| 万载县| 江城| 洪湖市| 靖宇县| 永福县| 房山区| 津市市| 日土县| 五大连池市| 天等县| 麦盖提县| 垣曲县| 十堰市| 西贡区| 景东| 大荔县| 凤翔县| 伊宁市| 岢岚县| 敦化市| 孝义市| 宾川县| 大洼县| 抚松县| 柘城县| 平邑县| 灌云县| 中宁县| 安宁市| 永新县| 清水河县| 吕梁市| 安乡县|