Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android游戲開發之SurfaceView的使用-android學習之旅(五)

Android游戲開發之SurfaceView的使用-android學習之旅(五)

編輯:關於Android編程

SurfaceView和View的區別

View是在ui主線程中,直接響應用戶的操作,以及任務的分發,但是任務比較復雜會出現阻塞。
SurfaceView則不會出現這種問題,以為它直接從內存等取得圖像,更為重要的是,SurfaceView可以通過主線程之外的線程來改變Ui。

使用

對於ui的更新分為主動更新和被動更新,對於被動更新,是通過時間出發控件的更新,頻率一般比較低,所以傾向選擇View來完成。
對於主動更新,更新頻率較快,比如定時器更新畫面,一版會采取SurfaceView。
實例代碼:

public class MyView extends SurfaceView implements SurfaceHolder.Callback{

    public MyView(Context context) {
        super(context);
        getHolder().addCallback(this);
    }
    public void draw(){
    //鎖定畫布
        Canvas canvas = getHolder().lockCanvas();
        //結束之後記得解鎖畫布
        getHolder().unlockCanvasAndPost(canvas);
    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }

}

用SuifaceView繪制簡單圖形

繪制了一個紅色的正方形:

public class MyView extends SurfaceView implements SurfaceHolder.Callback{
    private Paint paint = null;
    public MyView(Context context) {
        super(context);
        paint = new Paint();
        paint.setColor(Color.RED);
        getHolder().addCallback(this);
    }
    public void draw(){
        Canvas canvas = getHolder().lockCanvas();
        canvas.drawColor(Color.WHITE);
        canvas.drawRect(0, 0, 100, 100, paint);
        getHolder().unlockCanvasAndPost(canvas);
    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        draw();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }

}

注意一定要在surfaceCreated方法之後開始繪制,一定要在surfaceDestroyed方法之前結束繪制。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved