- Android游戲開發(fā)技術(shù)實(shí)戰(zhàn)詳解
- 褚尚軍 張加春編著
- 845字
- 2018-12-30 05:33:21
4.4 畫布類Canvas
Canvas類的完整寫法是android.graphics. Canvas,有“畫布”之意。我們可以將其看做是一種處理過程,使用各種方法來管理Bitmap、GL或者Path路徑,同時(shí)它可以配合Matrix矩陣類對圖像做旋轉(zhuǎn)、縮放等操作,同時(shí)Canvas類還提供了裁剪、選取等操作。在類Canvas中提供了如下常用的方法。
· Canvas():創(chuàng)建一個(gè)空的畫布,可以使用setBitmap()方法來設(shè)置繪制的具體畫布;
· Canvas(Bitmap bitmap):以bitmap對象創(chuàng)建一個(gè)畫布,將內(nèi)容都繪制在bitmap上,bitmap不能為null;
· Canvas(GL gl):在繪制3D效果時(shí)使用,與OpenGL有關(guān);
· drawColor:設(shè)置畫布的背景色;
· setBitmap:設(shè)置具體的畫布;
· clipRect:設(shè)置顯示區(qū)域,即設(shè)置裁剪區(qū);
· isOpaque:檢測是否支持透明;
· rotate:旋轉(zhuǎn)畫布;
· canvas.drawRect(RectF,Paint):用于繪制矩形,其中第1個(gè)參數(shù)是圖形顯示區(qū)域,第2個(gè)參數(shù)是畫筆,設(shè)置好圖形顯示區(qū)域RectF和畫筆Paint后就可以畫圖;
· canvas.drawRoundRect(RectF, float, float, Paint) :用于繪制圓角矩形,第1個(gè)參數(shù)為圖形顯示區(qū)域,第2個(gè)參數(shù)和第3個(gè)參數(shù)分別是水平圓角半徑和垂直圓角半徑;
· canvas.drawLine(startX, startY, stopX, stopY, paint):前4個(gè)參數(shù)的類型均為float,最后一個(gè)參數(shù)類型為Paint。表示用畫筆paint從點(diǎn)(startX,startY)到點(diǎn)(stopX,stopY)畫一條直線;
· canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint):第1個(gè)參數(shù)oval為RectF類型,即圓弧顯示區(qū)域,startAngle和sweepAngle均為float類型,分別表示圓弧起始角度和圓弧度數(shù),3點(diǎn)鐘方向?yàn)?度,useCenter設(shè)置是否顯示圓心(boolean類型),paint表示畫筆;
· canvas.drawCircle(float,float, float, Paint):用于繪制圓,前兩個(gè)參數(shù)代表圓心坐標(biāo),第3個(gè)參數(shù)為圓半徑,第4個(gè)參數(shù)是畫筆。
實(shí)例4-3 在Android中使用Canvas類(daima\4\CanvasCH)。
本實(shí)例的實(shí)現(xiàn)文件是CanvasCH.java,主要代碼如下所示。
/* 聲明Paint對象 */ private Paint mPaint = null; public CanvasCH(Context context) { super(context); /* 構(gòu)建對象 */ mPaint = new Paint(); /* 開啟線程 */ new Thread(this).start(); } public void onDraw(Canvas canvas) { super.onDraw(canvas); /* 設(shè)置畫布的顏色 */ canvas.drawColor(Color.BLACK); /* 設(shè)置取消鋸齒效果 */ mPaint.setAntiAlias(true); /* 設(shè)置裁剪區(qū)域 */ canvas.clipRect(10, 10, 280, 260); /* 首先鎖定畫布 */ canvas.save(); /* 旋轉(zhuǎn)畫布 */ canvas.rotate(45.0f); /* 設(shè)置顏色及繪制矩形 */ mPaint.setColor(Color.RED); canvas.drawRect(new Rect(15,15,140,70), mPaint); /* 解除畫布的鎖定*/ canvas.restore(); /* 設(shè)置顏色及繪制另一個(gè)矩形 */ mPaint.setColor(Color.GREEN); canvas.drawRect(new Rect(150,75,260,120), mPaint); } //觸筆事件 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-3所示。

圖4-3 執(zhí)行效果
- EJB 3.1從入門到精通
- Application Development with Qt Creator(Second Edition)
- Spring Cloud微服務(wù)架構(gòu)進(jìn)階
- 正在爆發(fā)的互聯(lián)網(wǎng)革命
- 企業(yè)私有云建設(shè)指南
- Mastering JavaFX 10
- Mastering Dart
- 網(wǎng)絡(luò)設(shè)計(jì)與應(yīng)用(第2版)
- 夢工廠之材質(zhì)N次方:Maya材質(zhì)手冊
- 工業(yè)互聯(lián)網(wǎng)創(chuàng)新實(shí)踐
- Learning Windows 8 Game Development
- 轉(zhuǎn)化:提升網(wǎng)站流量和轉(zhuǎn)化率的技巧
- Hands-On Bitcoin Programming with Python
- Implementing NetScaler VPX?
- 中國互聯(lián)網(wǎng)發(fā)展報(bào)告2021