zoukankan      html  css  js  c++  java
  • Android之帧动画

    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));
        }
    }
    

      

     执行效果图:

    不努力,还要青春干什么?
  • 相关阅读:
    docker部署spring boot并接入skywalking【探索篇】
    转载:如何处理一个CVE漏洞?
    转载:JavaScript利器分享之Proj4js
    转载:geoserver 2.18.0 跨域配置
    转载:如何实现OSM地图本地发布并自定义配图
    wsl2搭建ElasticSearch集群
    测试方法
    测试用例
    软件测试分类
    前端html
  • 原文地址:https://www.cnblogs.com/caidupingblogs/p/5037982.html
Copyright © 2011-2022 走看看