package com.fm;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.Log;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;public class MySurfaceView extends SurfaceView implements Callback, Runnable { private SurfaceHolder sfh; private Paint paint; private Thread th; private boolean flag; private Canvas canvas; private int screenW, screenH; //首先聲明十個(gè)容量的位圖數(shù)組 private Bitmap fishBmp[] = new Bitmap[10]; //記錄當(dāng)前播放幀 private int currentFrame; // /** * SurfaceView初始化函數(shù) */ public MySurfaceView(Context context) { super(context); sfh = this.getHolder(); sfh.addCallback(this); paint = new Paint(); paint.setColor(Color.WHITE); paint.setAntiAlias(true); setFocusable(true); //將每張小魚(yú)幀圖生成位圖存入小魚(yú)幀數(shù)組中 for (int i = 0; i < fishBmp.length; i++) { fishBmp[i] = BitmapFactory.decodeResource(this.getResources(), R.drawable.fish0+ i); } } /** * SurfaceView視圖創(chuàng)建,響應(yīng)此函數(shù) */ @Override public void surfaceCreated(SurfaceHolder holder) { screenW = this.getWidth(); screenH = this.getHeight(); flag = true; //實(shí)例線程 th = new Thread(this); //啟動(dòng)線程 th.start(); } /** * 游戲繪圖 */ public void myDraw() { try { canvas = sfh.lockCanvas(); if (canvas != null) { canvas.drawColor(Color.WHITE); canvas.drawBitmap(fishBmp[currentFrame], 0, 0, paint); } } catch (Exception e) { // TODO: handle exception } finally { if (canvas != null) sfh.unlockCanvasAndPost(canvas); } } /** * 觸屏事件監(jiān)聽(tīng) */ @Override public boolean onTouchEvent(MotionEvent event) { return true; } /** * 按鍵事件監(jiān)聽(tīng) */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } /** * 游戲邏輯 */ private void logic() { currentFrame++; if (currentFrame >= fishBmp.length) { currentFrame = 0; } } @Override public void run() { while (flag) { long start = System.currentTimeMillis(); myDraw(); logic(); long end = System.currentTimeMillis(); try { if (end - start < 50) { Thread.sleep(50 - (end - start)); } } catch (InterruptedException e) { e.printStackTrace(); } } } /** * SurfaceView視圖狀態(tài)發(fā)生改變,響應(yīng)此函數(shù) */ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } /** * SurfaceView視圖消亡時(shí),響應(yīng)此函數(shù) */ @Override public void surfaceDestroyed(SurfaceHolder holder) { flag = false; }}
MainActivity類:
package com.fm;import android.app.Activity;import android.os.Bundle;import android.view.Window;import android.view.WindowManager;public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //設(shè)置全屏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); //顯示自定義的SurfaceView視圖 setContentView(new MySurfaceView(this)); }}
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com