当前位置:Gxlcms > html代码 > DrawableAnimation帧动画_html/css_WEB-ITnose

DrawableAnimation帧动画_html/css_WEB-ITnose

时间:2021-07-01 10:21:17 帮助过:24人阅读

MySurfaceView类:

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;    //首先声明十个容量的位图数组    private Bitmap fishBmp[] = new Bitmap[10];    //记录当前播放帧    private int currentFrame;    //    /**     * SurfaceView初始化函数     */    public MySurfaceView(Context context) {        super(context);        sfh = this.getHolder();        sfh.addCallback(this);        paint = new Paint();        paint.setColor(Color.WHITE);        paint.setAntiAlias(true);        setFocusable(true);        //将每张小鱼帧图生成位图存入小鱼帧数组中        for (int i = 0; i < fishBmp.length; i++) {            fishBmp[i] = BitmapFactory.decodeResource(this.getResources(), R.drawable.fish0+ i);        }    }    /**     * SurfaceView视图创建,响应此函数     */    @Override    public void surfaceCreated(SurfaceHolder holder) {        screenW = this.getWidth();        screenH = this.getHeight();        flag = true;        //实例线程        th = new Thread(this);        //启动线程        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);        }    }    /**     * 触屏事件监听     */    @Override    public boolean onTouchEvent(MotionEvent event) {        return true;    }    /**     * 按键事件监听     */    @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视图状态发生改变,响应此函数     */    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    /**     * SurfaceView视图消亡时,响应此函数     */    @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);        //设置全屏        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);        requestWindowFeature(Window.FEATURE_NO_TITLE);        //显示自定义的SurfaceView视图        setContentView(new MySurfaceView(this));    }}

人气教程排行