Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android SurfaceView的運用

Android SurfaceView的運用

編輯:Android開發教程

下面就貼上一個小程序代碼,主要運用SurfaceView來實現在屏幕上畫一個圓,你可以通過按方向鍵和觸摸屏幕來改變圓的位 置

代碼:

Activity

package com.view;     

 import android.app.Activity;     
 import android.os.Bundle;     
 import android.view.Window;     
 import android.view.WindowManager;     

 public class MainActivity extends Activity {     
     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) {     
         super.onCreate(savedInstanceState);     
          
         // 隱藏狀態欄     
         this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,     
                 WindowManager.LayoutParams.FLAG_FULLSCREEN);     
          
         // 把Activity的標題去掉     
         requestWindowFeature(Window.FEATURE_NO_TITLE);     
          
         // 設置布局     
         this.setContentView(new MySurfaceView(this));     
     }     
 }

SurfaceView

package com.view;     
          
 import android.content.Context;     
 import android.graphics.Canvas;     
 import android.graphics.Color;     
 import android.graphics.Paint;     
 import android.view.KeyEvent;     
 import android.view.MotionEvent;     
 import android.view.SurfaceHolder;     
 import android.view.SurfaceHolder.Callback;     
 import android.view.SurfaceView;     
          
 public class MySurfaceView extends SurfaceView implements Runnable, Callback {     
          
     private SurfaceHolder mHolder; // 用於控制SurfaceView     
          
     private Thread t; // 聲明一條線程     
          
     private boolean flag; // 線程運行的標識,用於控制線程     
          
     private Canvas mCanvas; // 聲明一張畫布     
          
     private Paint p; // 聲明一支畫筆     
          
     private int x = 50, y = 50, r = 10; // 圓的坐標和半徑     
          
     public MySurfaceView(Context context) {     
         super(context);     
          
         mHolder = getHolder(); // 獲得SurfaceHolder對象     
         mHolder.addCallback(this); // 為SurfaceView添加狀態監聽     
         p = new Paint(); // 創建一個畫筆對象     
         p.setColor(Color.WHITE); // 設置畫筆的顏色為白色     
         setFocusable(true); // 設置焦點     
     }     
          
     /**    
      * 自定義一個方法,在畫布上畫一個圓    
      */ 
     public void Draw() {     
         mCanvas = mHolder.lockCanvas(); // 獲得畫布對象,開始對畫布畫畫     
         mCanvas.drawRGB(0, 0, 0); // 把畫布填充為黑色     
         mCanvas.drawCircle(x, y, r, p); // 畫一個圓     
         mHolder.unlockCanvasAndPost(mCanvas); // 完成畫畫,把畫布顯示在屏幕上     
     }     
          
     /**    
      * 當SurfaceView創建的時候,調用此函數    
      */ 
     @Override 
     public void surfaceCreated(SurfaceHolder holder) {     
         t = new Thread(this); // 創建一個線程對象     
         flag = true; // 把線程運行的標識設置成true     
         t.start(); // 啟動線程     
     }     
          
     /**    
      * 當SurfaceView的視圖發生改變的時候,調用此函數    
      */ 
     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width,     
             int height) {     
     }     
          
     /**    
      * 當SurfaceView銷毀的時候,調用此函數    
      */ 
     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) {     
         flag = false; // 把線程運行的標識設置成false     
     }     
          
     /**    
      * 當屏幕被觸摸時調用    
      */ 
     @Override 
     public boolean onTouchEvent(MotionEvent event) {     
         x = (int) event.getX(); // 獲得屏幕被觸摸時對應的X軸坐標     
         y = (int) event.getY(); // 獲得屏幕被觸摸時對應的Y軸坐標     
         return true;     
     }     
              
     /**    
      * 當用戶按鍵時調用    
      */ 
     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) {     
         if(keyCode == KeyEvent.KEYCODE_DPAD_UP){    //當用戶點擊↑鍵時     
             y--;    //設置Y軸坐標減1     
         }     
         return super.onKeyDown(keyCode, event);     
     }     
          
     @Override 
     public void run() {     
         while (flag) {     

             Draw(); // 調用自定義畫畫方法     
             try {     
                 Thread.sleep(50); // 讓線程休息50毫秒     
             } catch (InterruptedException e) {     
                 e.printStackTrace();     
             }     
         }     
     }     
          
 }

MySurfaceView首先繼承SurfaceView,然後實現Runnable和Callback接口

重寫了Runnable的run方法和 Callback的surfaceCreated(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width,int height),surfaceDestroyed(SurfaceHolder holder)方法,

還實現了onTouchEvent(MotionEvent event),onKeyDown (int keyCode, KeyEvent event)方法來,詳細的在代碼裡已注釋。

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