欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中SurfaceView用法簡單實例

 更新時間:2015年10月29日 14:56:09   作者:陽光島主  
這篇文章主要介紹了Android中SurfaceView用法,以一個簡單的圖形繪制及改變位置實現(xiàn)方法分析了SurfaceView的使用技巧,需要的朋友可以參考下

本文實例講述了Android中SurfaceView用法。分享給大家供大家參考,具體如下:

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

代碼:

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); 
     // 隱藏狀態(tài)欄 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
         WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     // 把Activity的標(biāo)題去掉 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     // 設(shè)置布局 
     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; // 線程運行的標(biāo)識,用于控制線程 
   private Canvas mCanvas; // 聲明一張畫布 
   private Paint p; // 聲明一支畫筆 
   private int x = 50, y = 50, r = 10; // 圓的坐標(biāo)和半徑 
   public MySurfaceView(Context context) { 
     super(context); 
     mHolder = getHolder(); // 獲得SurfaceHolder對象 
     mHolder.addCallback(this); // 為SurfaceView添加狀態(tài)監(jiān)聽 
     p = new Paint(); // 創(chuàng)建一個畫筆對象 
     p.setColor(Color.WHITE); // 設(shè)置畫筆的顏色為白色 
     setFocusable(true); // 設(shè)置焦點 
   } 
   /** 
   * 自定義一個方法,在畫布上畫一個圓 
   */ 
   public void Draw() { 
     mCanvas = mHolder.lockCanvas(); // 獲得畫布對象,開始對畫布畫畫 
     mCanvas.drawRGB(0, 0, 0); // 把畫布填充為黑色 
     mCanvas.drawCircle(x, y, r, p); // 畫一個圓 
     mHolder.unlockCanvasAndPost(mCanvas); // 完成畫畫,把畫布顯示在屏幕上 
   } 
   /** 
   * 當(dāng)SurfaceView創(chuàng)建的時候,調(diào)用此函數(shù) 
   */ 
   @Override 
   public void surfaceCreated(SurfaceHolder holder) { 
     t = new Thread(this); // 創(chuàng)建一個線程對象 
     flag = true; // 把線程運行的標(biāo)識設(shè)置成true 
     t.start(); // 啟動線程 
   } 
   /** 
   * 當(dāng)SurfaceView的視圖發(fā)生改變的時候,調(diào)用此函數(shù) 
   */ 
   @Override 
   public void surfaceChanged(SurfaceHolder holder, int format, int width, 
       int height) { 
   } 
   /** 
   * 當(dāng)SurfaceView銷毀的時候,調(diào)用此函數(shù) 
   */ 
   @Override 
   public void surfaceDestroyed(SurfaceHolder holder) { 
     flag = false; // 把線程運行的標(biāo)識設(shè)置成false 
   } 
   /** 
   * 當(dāng)屏幕被觸摸時調(diào)用 
   */ 
   @Override 
   public boolean onTouchEvent(MotionEvent event) { 
     x = (int) event.getX(); // 獲得屏幕被觸摸時對應(yīng)的X軸坐標(biāo) 
     y = (int) event.getY(); // 獲得屏幕被觸摸時對應(yīng)的Y軸坐標(biāo) 
     return true; 
   } 
   /** 
   * 當(dāng)用戶按鍵時調(diào)用 
   */ 
   @Override 
   public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if(keyCode == KeyEvent.KEYCODE_DPAD_UP){  //當(dāng)用戶點擊↑鍵時 
       y--;  //設(shè)置Y軸坐標(biāo)減1 
     } 
     return super.onKeyDown(keyCode, event); 
   } 
   @Override 
   public void run() { 
     while (flag) { 
       Draw(); // 調(diào)用自定義畫畫方法 
       try { 
         Thread.sleep(50); // 讓線程休息50毫秒 
       } catch (InterruptedException e) { 
         e.printStackTrace(); 
       } 
     } 
   } 
}

MySurfaceView首先繼承SurfaceView,然后實現(xiàn)Runnable和Callback接口

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

還實現(xiàn)了onTouchEvent(MotionEvent event),onKeyDown(int keyCode, KeyEvent event)方法來,詳細(xì)的在代碼里已注釋。

希望本文所述對大家Android程序設(shè)計有所幫助。

相關(guān)文章

最新評論