Android中SurfaceView用法簡單例項

NO IMAGE

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

這裡貼上一個小程式程式碼,主要運用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)方法來,詳細的在程式碼裡已註釋。

希望本文所述對大家Android程式設計有所幫助。

您可能感興趣的文章:

android影象繪製(四)自定義一個SurfaceView控制元件Android提高之SurfaceView的基本用法例項分析Android中SurfaceView和view畫出觸控軌跡Android App中使用SurfaceView製作多執行緒動畫的例項講解Android利用SurfaceView實現下雨的天氣動畫效果Android程式設計之SurfaceView學習示例詳解基於SurfaceView實現可拖動視訊控制元件