很簡單,顯示的圖片跟隨觸摸位置的變化而變化,詳見代碼.
[java]
- package cn.talentsoft.surfaceview;
- import java.io.InputStream;
-
- import Android.content.Context;
- import android.content.res.Resources;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.drawable.BitmapDrawable;
- import android.view.MotionEvent;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
-
- /**
- * 演示SurfaceView類的使用,圖片跟隨觸摸位置進行移動
- */
- public class MySurfaceView extends SurfaceView{
- // 控制surface的接口,提供了控制surface的大小、格式、像素
- private SurfaceHolder surfaceHolder;
- // 定義畫布引用
- private Canvas canvas;
- // x y 代表用戶觸摸屏幕的坐標
- private float x=0,y=0;
-
- private Bitmap bmp;
-
- public MySurfaceView(Context context) {
- super(context);
- // 獲取SurfaceHolder接口
- surfaceHolder = this.getHolder();
- // 設置屏幕保持開啟狀態
- this.setKeepScreenOn(true);
- // 獲取資源文件的引用res
- Resources res=getResources();
- // 獲取baby位圖資源文件的輸入流
- InputStream is=res.openRawResource(R.drawable.boy2012);
- // 創建可繪制的位圖對象
- BitmapDrawable bmpDraw=new BitmapDrawable(is);
- // 通過可繪制位圖對象得到位圖引用
- bmp=bmpDraw.getBitmap();
- }
-
- /**
- * 畫布上繪制boy2012圖片
- */
- private void draw() {
- try {
- // 鎖定Canvas畫布
- canvas = surfaceHolder.lockCanvas();
- // 設置canvas畫布背景為黑色
- canvas.drawColor(Color.BLACK);
- // 在畫布上繪制boy2012位圖
- canvas.drawBitmap(bmp, x-bmp.getWidth()/2, y-bmp.getHeight()/2, null);
- } catch (Exception ex) {
- } finally {
- if (canvas != null)
- // 解鎖畫布,並顯示繪制圖片
- surfaceHolder.unlockCanvasAndPost(canvas);
- }
- }
-
- /**
- * 用戶觸摸屏幕事件 -- 響應方法
- */
- public boolean onTouchEvent(MotionEvent event){
- x = event.getX();
- y = event.getY();
- draw();
- return true;
- }
-
- }