SurfaceView在游戲開發中有着舉足輕重的地位,它對於畫面的控制有着更大的自由度(不像View要用handler來更新,關於View的),但這方面的參考資料並不是太多,能找到的例子都有點喧賓奪主的感覺,不能把使用的流程清晰展示出來,下面是個簡單的示例,力求把流程清楚展示,其他的可簡則簡。
程序效果——1:用線程畫一個藍色的長方形。
JAVA代碼

package com.hyzhou.surfaceviewdemo; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.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; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } private class MyView extends SurfaceView implements SurfaceHolder.Callback { /** * @param context */ SurfaceHolder holder; public MyView(Context context) { super(context); // TODO Auto-generated constructor stub holder=this.getHolder(); holder.addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub new Thread(new MyThread()).start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } class MyThread implements Runnable { /* (non-Javadoc) * @see java.lang.Runnable#run() */ @Override public void run() { // TODO Auto-generated method stub Canvas canvas = holder.lockCanvas(null);//獲取畫布 Paint mPaint = new Paint(); mPaint.setColor(Color.BLUE); canvas.drawRect(new RectF(40,60,80,80), mPaint); //前2個參數代表右上角坐標,后2個參數代表右下角坐標 holder.unlockCanvasAndPost(canvas);//解鎖畫布,提交畫好的圖像 } } } }