SurfaceView在遊戲開發中有著舉足輕重的地位,它對於畫面的控制有著更大的自由度(不像View要用handler來更新,關於View的),但這方面的參考資料並不是太多,能找到的例子都有點喧賓奪主的感覺,不能把使用的流程清晰展示出來,下面是個簡單的樣本,力求把流程清楚展示,其他的可簡則簡。
程式效果:用線程畫一個藍色的長方形。
Java代碼 {
dp.sh.Toolbar.CopyToClipboard(this);return false;
}" href="http://rayleung.javaeye.com/blog/420410">
- package com.ray.test;
- /*
- * SurfaceView的樣本程式
- * 示範其流程
- */
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.RectF;
- import android.os.Bundle;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
-
- public class Test extends Activity {
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(new MyView(this));
- }
-
- //內部類
- class MyView extends SurfaceView implements SurfaceHolder.Callback{
-
- SurfaceHolder holder;
- public MyView(Context context) {
- super(context);
- holder = this.getHolder();//擷取holder
- holder.addCallback(this);
- //setFocusable(true);
-
- }
-
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width,
- int height) {
-
- }
-
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- new Thread(new MyThread()).start();
- }
-
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
-
- }
-
- //內部類的內部類
- class MyThread implements Runnable{
-
- @Override
- public void run() {
- Canvas canvas = holder.lockCanvas(null);//擷取畫布
- Paint mPaint = new Paint();
- mPaint.setColor(Color.BLUE);
-
- canvas.drawRect(new RectF(40,60,80,80), mPaint);
- holder.unlockCanvasAndPost(canvas);//解鎖畫布,提交畫好的映像
-
- }
-
- }
-
- }
- }
package com.ray.test;/* * SurfaceView的樣本程式 * 示範其流程 */import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.os.Bundle;import android.view.SurfaceHolder;import android.view.SurfaceView;public class Test extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } //內部類 class MyView extends SurfaceView implements SurfaceHolder.Callback{ SurfaceHolder holder;public MyView(Context context) {super(context);holder = this.getHolder();//擷取holderholder.addCallback(this);//setFocusable(true);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {new Thread(new MyThread()).start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}//內部類的內部類class MyThread implements Runnable{@Overridepublic void run() {Canvas canvas = holder.lockCanvas(null);//擷取畫布Paint mPaint = new Paint();mPaint.setColor(Color.BLUE);canvas.drawRect(new RectF(40,60,80,80), mPaint);holder.unlockCanvasAndPost(canvas);//解鎖畫布,提交畫好的映像}} }}
- TestSurfaceView0.1.rar (25.6 KB)