Android中SurfaceView用法示例


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);//解鎖畫布,提交畫好的圖像  

            }
        
        }
        
        
    }
    

}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM