Android DrawableAnimation逐帧动画加载多图(OOM的解决)
来源:互联网 发布:德国人怀念希特勒 知乎 编辑:程序博客网 时间:2024/06/07 23:45
想做一个逐帧动画,用了一百来张图片,结果内存溢出了,找了半天最后算是解决了。
本来是在drawable里面写一个animation-list,设置ImageView的backgroud,
然后在Activity里面
animationDrawable = (AnimationDrawable)mImageView.getBackground();
animationDrawable.start();但是图片多了就会内存溢出了。
最后采用的解决办法是这个http://www.kankanews.com/ICkengine/archives/86482.shtml
稍微改动了一下。
里面有三个构造方法,和两个播放的方法,直接构造就可以播放动画了
package com.example.animationoom;import android.os.Handler;import android.widget.ImageView;public class SceneAnimation {private ImageView mImageView;private int[] mFrameRess;// 图片private int[] mDurations;private int mDuration;private Handler handler = new Handler();Runnable mRunnable;private int mLastFrameNo;private long mBreakDelay;//参数包括pDurations数组,执行播放play(1);public SceneAnimation(ImageView pImageView, int[] pFrameRess, int[] pDurations) {mImageView = pImageView;mFrameRess = pFrameRess;mDurations = pDurations;mLastFrameNo = pFrameRess.length - 1;mImageView.setBackgroundResource(mFrameRess[0]);play(1);}//参数包括一个int 的执行时间 pDuration, 执行循环播放playConstant(1);public SceneAnimation(ImageView pImageView, int[] pFrameRess, int pDuration) {mImageView = pImageView;mFrameRess = pFrameRess;mDuration = pDuration;mLastFrameNo = pFrameRess.length - 1;mImageView.setBackgroundResource(mFrameRess[0]);playConstant(1);}//参数包括一个int的pDuration,一个long的pBreakDelay,表示每次播放的间隔,执行循环播放playConstant(1);public SceneAnimation(ImageView pImageView, int[] pFrameRess,int pDuration, long pBreakDelay) {mImageView = pImageView;mFrameRess = pFrameRess;mDuration = pDuration;mLastFrameNo = pFrameRess.length - 1;mBreakDelay = pBreakDelay;mImageView.setBackgroundResource(mFrameRess[0]);playConstant(1);}private void play(final int pFrameNo) {mRunnable = new Runnable() {public void run() {mImageView.setBackgroundResource(mFrameRess[pFrameNo]);if (pFrameNo == mLastFrameNo)play(0);elseplay(pFrameNo + 1);}};handler.postDelayed( mRunnable, mDurations[pFrameNo]);}private void playConstant(final int pFrameNo) {Handler handler = new Handler();handler.postDelayed(new Runnable() {public void run() {mImageView.setBackgroundResource(mFrameRess[pFrameNo]);if (pFrameNo == mLastFrameNo)playConstant(0);elseplayConstant(pFrameNo + 1);}}, pFrameNo == mLastFrameNo && mBreakDelay > 0 ? mBreakDelay : mDuration);}};
但是这样的方法还是有问题,在加载图片的时候,会有卡顿的现象。
而且目前是不能实现单词播放的,还需要做些改动。
0 2
- Android DrawableAnimation逐帧动画加载多图(OOM的解决)
- Android DrawableAnimation逐帧动画加载多图(OOM的解决)
- Android动画(二)之帧动画(DrawableAnimation)
- Android动画之DrawableAnimation(FrameAnimation)帧动画
- Android逐帧动画,逐帧动画加载图片过多时OOM异常的解决和替代方法
- Android 逐帧动画OOM的解决方法
- Android动画之ViewAnimation和DrawableAnimation
- Android 用surfaceview模拟帧动画的效果,解决帧动画的OOM问题
- 使用SurfaceView加载多张大分辨率图片做帧动画,解决OOM问题
- Android帧动画OOM
- Android 逐帧动画oom解决办法
- Android 解决加载图片过多出现oom--强大的Fresco
- Android实现图片的加载与释放(解决OOM问题)
- 帧动画加载大量图片OOM的解决办法
- Android TextView加载带有多张图片的HTML,并且解决图片造成的OOM
- Android加载大图片时的OOM异常及解决(图片的二次采样)
- 【OOM】Android加载大图片OOM异常解决
- Android—大图or多图加载解决方案(完美解决OOM问题)
- Java web----Service事务
- 那罗延数
- LeetCode--Search in Rotated Sorted Array II
- li之间的空隙bug
- 史考特优惠码72617188
- Android DrawableAnimation逐帧动画加载多图(OOM的解决)
- jquery ajax返回请求值却进入error
- 黑马程序员_面向对象之基础篇
- MySQL系列:innodb源码分析之page结构解析
- Source Insight常用快捷键及注释快捷键设置
- 织梦后台 自由列表更新后 去掉不使用目录默认主页
- 黑马程序员_异常处理篇
- 课程设计 个人通讯录管理助手
- 配置支持高并发TCP连接的Linux服务器全攻略