Android中SurfaceView的使用樣本

來源:互聯網
上載者:User

SurfaceView在遊戲開發中有著舉足輕重的地位,它對於畫面的控制有著更大的自由度(不像View要用handler來更新,關於View的),但這方面的參考資料並不是太多,能找到的例子都有點喧賓奪主的感覺,不能把使用的流程清晰展示出來,下面是個簡單的樣本,力求把流程清楚展示,其他的可簡則簡。

 

程式效果:用線程畫一個藍色的長方形。

Java代碼 {
dp.sh.Toolbar.CopyToClipboard(this);return false;
}" href="http://rayleung.javaeye.com/blog/420410">
  1. package com.ray.test;   
  2. /*  
  3.  * SurfaceView的樣本程式  
  4.  * 示範其流程  
  5.  */  
  6. import android.app.Activity;   
  7. import android.content.Context;   
  8. import android.graphics.Canvas;   
  9. import android.graphics.Color;   
  10. import android.graphics.Paint;   
  11. import android.graphics.RectF;   
  12. import android.os.Bundle;   
  13. import android.view.SurfaceHolder;   
  14. import android.view.SurfaceView;   
  15.   
  16. public class Test extends Activity {   
  17.     public void onCreate(Bundle savedInstanceState) {   
  18.         super.onCreate(savedInstanceState);   
  19.         setContentView(new MyView(this));   
  20.     }   
  21.        
  22.     //內部類   
  23.     class MyView extends SurfaceView implements SurfaceHolder.Callback{   
  24.   
  25.         SurfaceHolder holder;   
  26.         public MyView(Context context) {   
  27.             super(context);   
  28.             holder = this.getHolder();//擷取holder   
  29.             holder.addCallback(this);   
  30.             //setFocusable(true);   
  31.                
  32.         }   
  33.   
  34.         @Override  
  35.         public void surfaceChanged(SurfaceHolder holder, int format, int width,   
  36.                 int height) {   
  37.                
  38.         }   
  39.   
  40.         @Override  
  41.         public void surfaceCreated(SurfaceHolder holder) {   
  42.             new Thread(new MyThread()).start();   
  43.         }   
  44.   
  45.         @Override  
  46.         public void surfaceDestroyed(SurfaceHolder holder) {   
  47.                
  48.         }   
  49.            
  50.         //內部類的內部類   
  51.         class MyThread implements Runnable{   
  52.   
  53.             @Override  
  54.             public void run() {   
  55.                 Canvas canvas = holder.lockCanvas(null);//擷取畫布   
  56.                 Paint mPaint = new Paint();   
  57.                 mPaint.setColor(Color.BLUE);   
  58.                    
  59.                 canvas.drawRect(new RectF(40,60,80,80), mPaint);   
  60.                 holder.unlockCanvasAndPost(canvas);//解鎖畫布,提交畫好的映像   
  61.                    
  62.             }   
  63.                
  64.         }   
  65.            
  66.     }   
  67. }  
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)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.