andoid逐帧动画oom_Frame Animation(逐帧动画)【Android】

任何事情都是这样一个过程,决定去做了,就着手去做,一旦找到了舒适区,你就会乐在其中,或许就发现:“喜欢比努力更重要。”乐在其中地去坚持一件事,总好过天天暗示自己“你必须这么做”要来得容易且长久。永远充满喜悦地唱每一首歌,跳每一段舞,看每一场球赛,过每一段人生。

Frame Animation(帧动画/逐帧动画/Drawable Animation),顾名思义是指将画面一帧一帧的进行播放的动画,它有两种实现方式,第一种方式是通过Java代码实现,这里需要使用到AnimationDrawable。第二种方式XML进行实现,这里需要用到标签。

第一种方式,Java实现:

这里我在res/drawable下放置loading_01~loading_12张png文件,用来显示每帧的效果图。先要从该文件夹下取出Drawable最后通过anim.addFrame(drawable,100)添加进来即可,其中anim.setOneShot(false);这个方法是用来设置该动画效果是否为一次播放,true的时候表示播放一次就停止,false的时候表示可以联系播放。

AnimationDrawable anim =new AnimationDrawable();

for(int i =1; i <=12; i++) {

int id;

// 获取Drawable文件夹下的图片文件

if(i <10)

id = getResources().getIdentifier("loading_0"+ i,"drawable",getPackageName());

else

id = getResources().getIdentifier("loading_"+ i,"drawable",getPackageName());

Drawable drawable = getResources().getDrawable(id);

anim.addFrame(drawable,100);

}

anim.setOneShot(false);

imageView.setImageDrawable(anim);

第二种方式:XML进行实现。

android:oneshot="false">

......

这样就将该一个帧动画设置完成,然后只需要在XML布局文件中进行调用。

android:id="@+id/imageView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:contentDescription="@null"

android:src="@drawable/loading"/>

然而当我们运行的时候会发现动画没有运行而是停留在第一帧,这是为什么呢?

那是因为AnimationDrawable播放动画是依附在window上面的,而在Activity onCreate方法中调用时Window还未初始化完毕,所有才会停留在第一帧,要想实现播放可以在onWindowFocusChanged或onCreate方法中添加如下代码:

// XML实现逐帧动画

imageView.setImageResource(R.drawable.loading);

AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getDrawable();

animationDrawable.start();

补充:AnimationDrawable 几个常见的api。

void start()- 开始播放动画

void stop()- 停止播放动画

addFrame(Drawable frame, int duration)- 添加一帧,并设置该帧显示的持续时间

void setOneShoe(boolean flag)- false为循环播放,true为仅播放一次

boolean isRunning()- 是否正在播放

总结:逐帧动画使用起来较为简单,但是大量的使用,会占用大部分的CPU资源,是界面卡顿,而且如果画面使用图片过大时候还会出现OOM问题。

微信公众号:书客创作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值