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

一,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);

--------------------------------------------------------------------------------------------

刚开始学习,写博客只是希望能记录自己的成长轨迹,欢迎大家指点。

时间: 2024-10-18 00:59:38

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

Android 帧动画XML

帧动画 的XML <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/loading1" 动画图片 android:duration="50" /> 间隔时间 <item androi

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

2015年项目接到一个需求,实现一个向导动画,这个动画一共六十张图片,当时使用的是全志A33的开发板,通过使用Android的动画集实现,效果特别卡顿,然后想到这种方式来实现,效果很流畅.然后写成开一个开源项目供大家参考 通过以下两种方式实现帧动画,使用相同的80张280x280的png图片执行动画,资源占用情况对比: 代码地址: https://github.com/ansen360/FrameAnimation Sample效果: http://oma689k8f.bkt.clouddn.c

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

1.苦逼的需求又来了,需要实现一些动画效果,第一个想到的是播放gif图片,但是这样会占包的资源,并且清晰度不高,于是想着程序实现,自己用帧动画+缩放+移动+透明度 实现了一些想要的效果,这里跟大家分享一下 2.效果图如下: 3.帧动画实现代码 1).首先获取每帧显示的ImageView控件,然后把所有帧放到AnimationDrawable对象里面去,开启动画,通过handle延时2秒关闭动画 ImageView ivFrame = (ImageView) findViewById(R.id.i

android帧动画

一.在xml文件中设置帧动画 1.首先得在drawable资源文件夹下创建一个animation_list文件 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/

[android] 帧动画和补间动画

逐帧显示一张图片,连起来成为动画 在res/drawable/目录下,创建一个xxx.xml的文件 添加<animation-list>节点,设置是否循环android:oneshot:”false” 添加条目<item>节点,设置资源android:drawable=”@drawable/xxx” 设置执行时间,android:duration=”100” 逐帧添加对应的图片 获取ImageView对象,通过findViewById() 调用ImageView对象的setBack

实现逐帧动画和补间动画两种动画效果

1.逐帧动画(Frame Animation)通常在Android项目的res/drawable/目录下面定义逐帧动画的XML模板文件.编码的时候,需要在动画模板文件的<animation-list>标签中依次放入需要播放的图片,并设置好播放的间隔时间. <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"

Android之动画

Android的动画可以分为三种,View动画.帧动画.属性动画.View动画通过对场景里的对象不断做图像变化(平移.缩放.旋转.透明度)从而产生动画效果,它是一种渐进式动画,而且View动画支持自定义.帧动画可以理解为图片切换动画(如果图片过多,会导致OOM).属性动画为API11的新特性,属性动画通过通过动态地改变对象的属性从而达到动画效果. View动画 View动画的种类:View动画的四种变换效果对应着Animation的四个子类.TranslateAnimation,ScaleAni

IOS开发--动画篇--&gt;火焰帧动画

火焰帧动画 火焰帧动画,并添加停止/开始按钮 火焰帧动画步骤: 1,创建可变数组,存放图片 2,创建帧动画所需的图片(for循环创建),并将所创建的图片放入可变数组中 3,创建视图ImageView,并设置其初始图片,放在window上 4,设置帧动画时间,默认时间为1/30.1*图片数目: _imageView.animationDuration = 1; 5,设置动画的图片数组,赋值的数组必须存放的是UIImage类型的对象: _imageView.animationImages = arr

Android动画--帧动画和补间动画

帧动画 首先我们定义在drawable文件夹下定义一个xml文件 里面包含我们要播放的动画的图片,以及每一帧动画的播放的时长 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mi