android-Android一个动画,连续运行80个小时之后会停止,没发现有异常log,应用也没有死掉。

问题描述

Android一个动画,连续运行80个小时之后会停止,没发现有异常log,应用也没有死掉。

Android一个动画,连续运行80个小时之后会停止,没发现有异常log,应用也没有死掉。
动画是一个六面正方体来回旋转,开始正常旋转,但是在连续旋转80个小时之后,正方体就会停止旋转,静止在一个状态,但是应用程序并没有死掉,可以正常退出,并且没有异常log,代码如下:
代码在楼下的回答里边,这个问答加代码总是格式不正确。

解决方案

public class CuteSurfaceView extends GLSurfaceView {
public float rotateX; // 用于正方体x轴的旋转;
public float rotateY; // 用于正方体y轴的旋转;
public float rotateZ; // 用于正方体z轴的旋转;
private boolean bAutoRotate = true;
public CuteSurfaceView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    setRenderer(new GuteRender());
}
private class GuteRender implements Renderer {
    private int one = 0x10000;
    private int[] quarter = { -one, -one, one, one, -one, one, one, one,
            one, -one, one, one,

            -one, -one, -one, -one, one, -one, one, one, -one, one, -one,
            -one,
            -one, one, -one, -one, one, one, one, one, one, one, one, -one,
            -one, -one, -one, one, -one, -one, one, -one, one, -one, -one,
            one,
            one, -one, -one, one, one, -one, one, one, one, one, -one, one,
            -one, -one, -one, -one, -one, one, -one, one, one, -one, one,
            -one, };
    private int[] texCoords = { one, 0, 0,
            0,  0, one,
            one, one,0,
            0, 0,one,
            one, one, one,
            0,one, one,
            one, 0, 0,
            0, 0, one,
            0, one, one,
            one,one, 0,
            0, 0, 0,
            0, 0, one,
            one, one, one, 0,
            one, 0, 0, 0,
            0, one, one, one, };
    // 三角形索引数据
    ByteBuffer indices1 = ByteBuffer.wrap(new byte[] { 0, 1, 3, 2, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, });
    ByteBuffer indices2 = ByteBuffer.wrap(new byte[] { 0, 0, 0, 0, 4, 5, 7,
            6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, });
    ByteBuffer indices3 = ByteBuffer.wrap(new byte[] { 0, 0, 0, 0, 0, 0, 0,
            0, 8, 9, 11, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, });
    ByteBuffer indices4 = ByteBuffer.wrap(new byte[] { 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 12, 13, 15, 14, 0, 0, 0, 0, 0, 0, 0, 0, });
    ByteBuffer indices5 = ByteBuffer.wrap(new byte[] { 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 19, 18, 0, 0, 0, 0, });
    ByteBuffer indices6 = ByteBuffer.wrap(new byte[] { 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 23, 22, });
    Bitmap[] bmp = new Bitmap[6];
    int[] tex_id = new int[6];
    public GuteRender() {
        bmp[0] = BitmapFactory.decodeResource(getResources(),
                R.drawable.img1);
        bmp[1] = BitmapFactory.decodeResource(getResources(),
                R.drawable.img2);
        bmp[2] = BitmapFactory.decodeResource(getResources(),
                R.drawable.img3);
        bmp[3] = BitmapFactory.decodeResource(getResources(),
                R.drawable.img4);
        bmp[4] = BitmapFactory.decodeResource(getResources(),
                R.drawable.img5);
        bmp[5] = BitmapFactory.decodeResource(getResources(),
                R.drawable.img6);
        setFocusable(true);
    }
    @Override
    public void onDrawFrame(GL10 gl) {
        // TODO Auto-generated method stub
        // 清楚屏幕和深度缓存
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        // 重置当前的观察模型矩阵
        gl.glLoadIdentity();
        // 现将屏幕向里移动,用来画正方体
        gl.glTranslatef(0.0f, 0.0f, -6.0f);
        if (bAutoRotate) {
//              rotateX += 0.5;
//              rotateY += 0.6;
//              // rotateZ+=0.3;
            rotateX += 0.5;
            rotateY += 0.5;
//              rotateZ +=10.5;
        }
        // 设置3个方向的旋转
        gl.glRotatef(rotateX*10, 1.0f, 0.0f, 0.0f);
        gl.glRotatef(rotateY*10, 0.0f, 1.0f, 0.0f);
        gl.glRotatef(rotateZ*10, 0.0f, 0.0f, 1.0f);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        // 纹理的使用与开启颜色渲染一样,需要开启纹理功能
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        // 设置正方体 各顶点
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, BufferUtil.iBuffer(quarter));
        gl.glTexCoordPointer(2, GL10.GL_FIXED, 0,BufferUtil.iBuffer(texCoords));
        // 绘制立方体并绑定纹理
        gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id[0]);
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 4, GL10.GL_UNSIGNED_BYTE,
                indices1);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id[1]);
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 8, GL10.GL_UNSIGNED_BYTE,
                indices2);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id[2]);
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 12,
                GL10.GL_UNSIGNED_BYTE, indices3);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id[3]);
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 16,
                GL10.GL_UNSIGNED_BYTE, indices4);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id[4]);
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 20,
                GL10.GL_UNSIGNED_BYTE, indices5);
        gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id[5]);
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 24,
                GL10.GL_UNSIGNED_BYTE, indices6);

        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    }
    // 当窗口改变时,调用,至少在创建窗口时调用一次,这边设置下场景大小
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        // TODO Auto-generated method stub
        // 设置OpenGL场景大小
        float ratio = (float) width / height;
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);// 设置为投影矩阵模式
        gl.glLoadIdentity();// 重置
        gl.glFrustumf(-ratio, ratio, -1, 1, 2, 10);// 设置视角
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
    }
    // 当窗口被创建时我们可以做些初始化工作
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // TODO Auto-generated method stub
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
        // 设置清除屏幕时所用的颜色,参数依次为红、绿、蓝、Alpha值
        // gl.glClearColor(0, 0, 0, 0);
        gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
        gl.glEnable(GL10.GL_CULL_FACE);
        // 启用阴影平滑
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glEnable(GL10.GL_DEPTH_TEST);// 启用深度测试
        // 以下是关于深度缓存的设置,非常重要
        gl.glClearDepthf(1.0f);// 设置深度缓存
        gl.glDepthFunc(GL10.GL_LEQUAL);// 所做深度测试的类型
        // 告诉系统对透视进行修正
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
        // 允许2D贴图
        gl.glEnable(GL10.GL_TEXTURE_2D);
        // gl.glGenTextures(6, tex_id, 0);
        IntBuffer textureBuffer = IntBuffer.allocate(6);
        gl.glGenTextures(6, textureBuffer);
        tex_id = textureBuffer.array();
        for (int i = 0; i < 6; i++) {
            gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id[i]);
            GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp[i], 0);
            gl.glTexParameterx(GL10.GL_TEXTURE_2D,
                    GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
            gl.glTexParameterx(GL10.GL_TEXTURE_2D,
                    GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
        }
         if(flag == 1)
            {
             rotateX += 2.0f;
            }else if(flag == 2)
            {
                rotateX -= 2.0f;
            }else if(flag == 3)
            {
                rotateY += 2.0f;
            }else if(flag == 4)
            {
                rotateY -= 2.0f;
            }
            if(flag == 1 || flag == 2)
            if((int)(rotateX%90)==0)
            {
                flag = 0;
            }
            if(flag == 3 || flag == 4)
            if((int)(rotateY%90) ==0)
            {
                flag =0;
            }
    }
}
public static class BufferUtil {
    public static IntBuffer intBuffer;
    public static IntBuffer iBuffer(int[] a) {
        // 先初始化buffer,数组的长度*4,因为一个float占4个字节
        ByteBuffer mbb = ByteBuffer.allocateDirect(a.length * 4);
        // 数组排列用nativeOrder
        mbb.order(ByteOrder.nativeOrder());
        intBuffer = mbb.asIntBuffer();
        intBuffer.put(a);
        intBuffer.position(0);
        return intBuffer;
    }
}
int flag=0;
int tag=0;
float last_x;
float last_y;
float flagx;
float flagy;
long mm;
}
时间: 2024-07-28 12:52:08

android-Android一个动画,连续运行80个小时之后会停止,没发现有异常log,应用也没有死掉。的相关文章

Android播放多张图片形成的一个动画示例_Android

本文实例讲述了Android播放多张图片形成的一个动画.分享给大家供大家参考,具体如下: 在Android里可以逐帧的播放图片,然后产生一种动态的效果,准备好几张连续的图片,然后在于源程序res文件夹下建立anim文件夹,然后新建一个XML XML代码如下: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.androi

android 界面跳转和动画同时运行是出现的问题。

问题描述 android 界面跳转和动画同时运行是出现的问题. 我想做的是,打开一个客户端(安卓平台),然后显示一段动画,动画结束之后就跳转到另外一个界面.但是,这两个功能单个实现的时候都没有问题,两个一起运行是就出问题了,编译通过,然后启动程序,开始演示动画,当动画演示完毕,准备跳转界面的时候,程序就出问题了,就是直接退出了.代码如下. public class Open extends Activity{ private ImageView imageView; private Animat

android中的动画可以改变一个view的高和宽吗?

问题描述 android中的动画可以改变一个view的高和宽吗? 简单点说把,就是在android中通过动画可以改变这个对象的高度和宽度吗?举个例子,现在有一个图片,是imageview,我可不可以给他做一个动画让他高度变大?这个变大是指他实际占用的位置,比如这个imagview我在xml里配置的是200dip,通过动画我可以让他再动画结束后的高度变成500dip吗? 解决方案 类似效果,你的动画改变view布局参数,应该对imageView应用新的布局参数. 创建应用新布局参数(lp)的自定义

android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事。

问题描述 android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事. eclipse上也没有错误提示,怎么运行不了.安装好就提示停止运行. 文件 解决方案 看logcat的日志,或者进入调试模式运行,一步步调 解决方案二: 亲,绑定布局空间是要通过布局管理者来获取的,不然就是空指针错误.具体如下 解决方案三: 用调试模式调试吧,很方便的. 解决方案四: 要看log日志的啊.看日志才知道哪里出错了, 解决方案五: fragment控件初始化的问题吧 解决方案六: fragment控

android开发-新建一个android helloworld应用,但运行后只显示android几个字,不显示helloworld.

问题描述 新建一个android helloworld应用,但运行后只显示android几个字,不显示helloworld. 工程启动后,console显示以下报错信息 Android Launch! [2014-03-31 15:07:08 - firstapp] adb is running normally. [2014-03-31 15:07:08 - firstapp] Performing com.example.firstapp.MainActivity activity laun

[译] 如何创建 BubblePicker – Android 多彩菜单动画

本文讲的是[译] 如何创建 BubblePicker – Android 多彩菜单动画, 原文地址:How We Created BubblePicker – a Colorful Menu Animation for Android 原文作者:Irina Galata, Yuliya Serbenenko 译文出自:掘金翻译计划 译者:hackerkevin 校对者:luoqiuyu phxnirvana 如何创建 BubblePicker – Android 多彩菜单动画 我们已经习惯了移动

android 巧用动画使您app风骚起来

巧用Android的自定义动画,使你更加的有动感,是大多数Android开发人员的目标,那怎么做到这点.请听下文分解: 3.0以前,android支持两种动画模式,tween animation(幅间动画),frame animation(帧动画),在android3.0中又引入了一个新的动画系统:property animation(值动画),这三种动画模式在SDK中被称为property animation,view animation,drawable animation. 可通过Nine

【Android开发】动画范例1-士兵走起来!

利用学过的逐帧动画技术来在Android上实现让一个士兵上下左右行走的小例子. 具体效果如图 使用资源图片如图 具体实现: 首先将图片资源加入drawable文件夹下,然后在res文件夹下建立如下四个逐帧动画的配置XML文件,分别实现让士兵向上.下.左.右行走的动画播放: anim_up.xml: <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="h

我的Android进阶之旅------&amp;gt;Android之Animations动画详解

一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画