一,animation_list.xml中静态配置帧动画的顺序,如下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" > <item
android:drawable="@drawable/animation_1"
android:duration="1000"/>
<item
android:drawable="@drawable/animation_2"
android:duration="100"/>
<item
android:drawable="@drawable/animation_3"
android:duration="100"/>
<item
android:drawable="@drawable/animation_4"
android:duration="100"/>
<item
android:drawable="@drawable/animation_5"
android:duration="100"/>
</animation-list>

注意:

1,android:duration="100" 指的是相应帧持续的时间。
2,android:oneshot 的配置 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
二、方法中调用,如下:
mImageView.setImageResource(R.drawable.animation_list);
animationDrawable = (AnimationDrawable) mImageView.getDrawable();
animationDrawable.start();

当然,也可以在方法中动态设置动画的播放,调用如下方法:

void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放
这时也可以中途控制动画的播放与停止,如下所示:
mImageView.setImageResource(R.drawable.animation_list);
animationDrawable = (AnimationDrawable) mImageView.getDrawable();
if(animationDrawable.isRunning()){ //当前AnimationDrawable是否正在播放
animationDrawable.stop(); //停止播放逐帧动画。
}
animationDrawable.start(); //开始播放逐帧动画。

三、OOM解决方案(一):

使用以上方法基本可以解决20张图片以内的帧动画了,但是图片一多,便会报OOM错误,
以下是我的一个解决方案,不是最好的,我也觉得有很多问题,但确实解决了这个问题,
姑且称为方案一,相信我还会想到更好的解决方案,到时候再与大家分享
1,首先在初始化时,直接初始化两个数组,一个保存每一帧照片,另一个保存每一帧图片的持续时间
 images = new int [42];
    images[0] = R.drawable.animation_0; //动画开始时的动画
images[1] = R.drawable.animation_1;
images[2] = R.drawable.animation_2;
images[3] = R.drawable.animation_3;
......
images[40] = R.drawable.animation_40;
images[41] = R.drawable.animation_41; //动画结束时的画面 durations = new int[40] ;
durations[0] = 200; //事件触发后多长时间开始动画
durations[1] = 100;
durations[2] = 200;
......
durations[40] = 300;
2,新建myAnimation类:
   public class myAnimation{
private ImageView mImageView; //播方动画的相应布局
private int[] mImageRes;
private int[] durations; public myAnimation(ImageView pImageView, int[] pImageRes,
int[] durations) {
this.mImageView = pImageView;
this.durations = durations;
this.mImageRes= pImageRes;
mImageView.setImageResource(mImageRes[1]);
play(1);
} private void play(final int pImageNo) {
mImageView.postDelayed(new Runnable() { //采用延迟启动子线程的方式
public void run() {
mImageView.setImageResource(mImageRes[pImageNo]);
if (pImageNo == mImageRes.length-1)
return;
else
play(pImageNo + 1);
}
}, durations[pImageNo-1]);
}
}
3,在监听事件中新建一个myAnimation类的对象即可:
  new myAnimation(ImageView, images,durations);
 
 
--------------------------------------------------------------------------------------------
刚开始学习,写博客只是希望能记录自己的成长轨迹,欢迎大家指点。

android 帧动画的实现及图片过多时OOM解决方案(一)的更多相关文章

  1. android 帧动画,补间动画,属性动画的简单总结

      帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果.其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建ani ...

  2. android 帧动画

    首先在res/drawable/name1.xml/定义一组图片集合: <?xml version="1.0" encoding="utf-8"?> ...

  3. android帧动画,移动位置,缩放,改变透明度等动画讲解

    1.苦逼的需求又来了,需要实现一些动画效果,第一个想到的是播放gif图片,但是这样会占包的资源,并且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享 ...

  4. 如何解决Android帧动画出现的内存溢出

    这几天在做动画的时候,遇到了一个OOM的问题,特此记录下来. 普通实现 实现一个帧动画,最先想到的就是用animation-list将全部图片按顺序放入,并设置时间间隔和播放模式.然后将该drawab ...

  5. Android帧动画实现,防OOM,比原生动画集节约超过十倍的资源

    2015年项目接到一个需求,实现一个向导动画,这个动画一共六十张图片,当时使用的是全志A33的开发(512的内存),通过使用Android的动画集实现,效果特别卡顿,然后想到这样的方式来实现,效果非常 ...

  6. android帧动画,移动位置,缩放,改变透明度等动画解说

    1.苦逼的需求又来了,须要实现一些动画效果,第一个想到的是播放gif图片,可是这样会占包的资源,而且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享 ...

  7. Android 帧动画使用

    帧动画 使用一系列不同的图片,然后像一卷胶卷一样按顺序播放,这是一种传统的动画,也可称为帧动画.也可以比喻为像一卷胶卷一样按顺序播放. 播放起来,有点像在看gif图. 本文介绍使用AnimationD ...

  8. Android帧动画笔记

    创建drawable资源文件,选择animation-list<?xml version="1.0" encoding="utf-8"?><a ...

  9. [android] 帧动画和补间动画

    逐帧显示一张图片,连起来成为动画 在res/drawable/目录下,创建一个xxx.xml的文件 添加<animation-list>节点,设置是否循环android:oneshot:” ...

随机推荐

  1. 用Broadcast广播在activity之间、fragment之间、activity和fragment之间相互传数据

    例如:A界面要收到B界面的更变信息 一.A界面注册广播 private static final String INTENT_BROADCAST = "android.intent.acti ...

  2. Scrapy--1安装和运行

    1.Scrapy安装问题 一开始是按照官方文档上直接用pip安装的,创建项目的时候并没有报错, 然而在运行 scrapy crawl dmoz 的时候错误百粗/(ㄒoㄒ)/~~比如: ImportEr ...

  3. 采用flask+uwsgi+nginx架构将flask应用程序部署在腾讯云

    最近一星期加班为学校做了一个教师发展中心平台,在此总结一下部署经验 环境:Centos7.0  python2.7.5 1.安装nginx 命令行输入指令:sudo yum install nginx ...

  4. SEO之网站稳定

    周未给大伙推荐个电影 :<环太平洋> http://947kan.com/movie/kehuan/45659/ 主要讲述了人类对抗从太平洋海底的时空裂缝不断传送过来的大怪兽,保卫家园的故 ...

  5. SQL Server Management Studio 已停止工作 异常错误

    找到类似环境下sql的路径 D:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\ 复制出 Ss ...

  6. sqlite数据库的使用helper

    public class SQLiteHelper     {         //public static String ConnectionString = "Data Source= ...

  7. 安装自创建的windows服务。

    安装自创建的windows服务. 使用工具InstallUtil.exe进行安装和卸载创建的windows服务 安装:C:/WINDOWS/Microsoft.NET/Framework/v2.0.5 ...

  8. 深入浅出Mybatis系列(九)---强大的动态SQL

    上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap>简单介绍了mybatis的查询,至此,CRUD都已讲完.本文将介绍mybatis ...

  9. 《Javascript设计模式》笔记一js的表现力

    用不同方法完成同样一个任务:启动和停止动画. 1.过程式的程序设计: function startAnimation(){ ... } function stopAnimation(){ ... } ...

  10. myhandle

    #ifndef my_handle_h #define my_handle_h #include <stdint.h> #include "mydef.h" #incl ...