android很多图片做成帧动画造成内存溢出的解决方法。

翻译 2015年11月20日 09:56:41
package com.familydoctor.widget;

import android.os.Handler;
import android.util.Log;
import android.widget.ImageView;

import com.familydoctor.event.BaseEvent;
import com.familydoctor.event.EventCode;
import com.familydoctor.manager.EventManager;

/**
 * Created by kk on 2015/11/19.
 * ImageAnimation animation = new ImageAnimation(Iv_guide(控件 ImageView, images (图片资源 int[], 115 (每张图片的时间间隔));
 */
public class ImageAnimation {

    private Handler handler;//线程处理
    private MovieAction action;//播放器


    //固定循环时间
    public ImageAnimation(ImageView view,int[] frameRes,int duration){
        int len = frameRes.length;
        int [] frameDuration = new int[len];
        for(int i=0;i<len;i++){
            frameDuration[i]=duration;
        }
        this.Init(view,frameRes,frameDuration);
    }

    //非固定循环时间
    public ImageAnimation(ImageView view, int [] frameRes,int[] frameDuration){
        this.Init(view,frameRes,frameDuration);

    }

    private void Init(ImageView view, int [] frameRes,int[] frameDuration){

        if(null==view) {
            Log.e("ImageAnimation", "创建动画失败。");
        }else if(null == frameRes || null == frameDuration ||0 == frameRes.length ||0 == frameDuration.length) {
            Log.e("ImageAnimation", "帧数或资源为空.");
        }else if(frameRes.length != frameDuration.length){
            Log.e("ImageAnimation","帧数与间隔时间不匹配");
        }else {
            handler = new Handler();
            action = new MovieAction(handler, view, frameRes, frameDuration);
        }
    }


}


//动画播放类
class MovieAction implements Runnable{

    private ImageView mView;//画布
    private int [] mFrameRes;//资源
    private int[] mFrameDuration;//间隔
    private int currentFrame;//当前帧
    private int totalFrame;//总帧数

    private Handler mHandler;//线程

    public MovieAction(Handler handler,ImageView view, int [] frameRes,int[] frameDuration){
        this.mView = view;
        this.mFrameRes = frameRes;
        this.mFrameDuration = frameDuration;
        this.mHandler = handler;

        totalFrame = this.mFrameRes.length;
        currentFrame = 0;
        mHandler.postDelayed(this, mFrameDuration[currentFrame]);
    }

    public void destory(){
        this.mHandler.removeCallbacks(this);
    }


    /**
     * Starts executing the active part of the class' code. This method is
     * called when a thread is started that has been created with a class which
     * implements {@code Runnable}.
     */
    @Override
    public void run() {
        mView.setBackgroundResource(mFrameRes[currentFrame]);

        currentFrame++;
        if(++currentFrame<totalFrame) {
            mHandler.postDelayed(this, mFrameDuration[currentFrame]);
        }else{
            System.out.println("destory、、、、、");
            destory();
            EventManager.getInstance().DispatchEvent(new BaseEvent(EventCode.ShowBtn));
        }
    }

}

相关文章推荐

Android使用帧动画内存溢出解决方法

最近在项目遇到的动画效果不好实现,就让UI切成图,采用帧动画实现效果,但是在使用animation-list时,图片也就11张,每张图片大概560k左右,结果内存溢出,崩溃 了,自己用了三张都崩溃;拿...

android中由于下载图片造成的内存溢出的解决方法

结合了网上的一些思路的说明,自己谢了个关于下载图片时防止内存的方法,如下:/** * 下载图片 * @param imageUrl 地址 * @return */ public Dr...

Android中图片过大造成内存溢出常用解决方法

当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M(?),试想想我们用手机拍照,普通的一张照片不也得1M以上,所以and...

Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法(2)

在Android中:   1.一个进程的内存可以由2个部门组成:java 施用内存 ,C 施用内存 ,这两个内存的和必需小于16M,不然就会出现各人熟悉的OOM,这个就是熬头种OOM的情况。   2....
  • cqtddt
  • cqtddt
  • 2014年03月20日 12:05
  • 522

Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法(4)

最近在做电信的一个视频地图项目时,需要获取网络图片预览,用到图片缩略图技术,通过参考了很多同行的方法,本人写了以下获取网络图片缩略图的代码,如有不妥,望高手指正,谢谢。以下是实现方法: 获取...
  • cqtddt
  • cqtddt
  • 2014年03月20日 16:46
  • 635

Android中图片过大造成内存溢出,OOM(OutOfMemory)异常解决方法(1)

当我们在做项目过程中,一遇到显示图片时,就要考虑图片的大小,所占内存的大小,原因就是Android分配给Bitmap的大小只有8M,试想想我们用手机拍照,普通的一张照片不也得1M以上,所以androi...
  • cqtddt
  • cqtddt
  • 2014年03月20日 11:50
  • 506

Android加载图片内存溢出问题解决方法

1. 在Android软件开发过程中,图片处理是经常遇到的。 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API...

Android 异步获取网络图片并处理导致内存溢出问题解决方法

最经做网络图片这一部分,前一段时间,运行测试没出现问题,这两天测试出现图片溢出问题,于是找网上资料,查看解决问题,就用了,下面的解决图片大小问题。 测试后,没出现内存溢出问题,转载给自己学习和大家共...

Android 加载图片内存溢出解决方法

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过j...
  • happyq
  • happyq
  • 2011年12月21日 18:01
  • 650

关于设置图片时,内存溢出的解决方法

不知道大家在使用ImageView的setImageBitmap方法时,有没有遇到过一旦给ImageView设置比较大的图片,就会导致内存溢出这样的问题。希望我所用的方法在一定程度上可以帮助大家~~ ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android很多图片做成帧动画造成内存溢出的解决方法。
举报原因:
原因补充:

(最多只允许输入30个字)