xiuyuantech博客
xiuyuantech 博客:https://xiuyuantech.github.io/

简介
而Android中实现帧动画,一般我们会用到前面讲解到的一个Drawable:AnimationDrawable 先编写好Drawable,然后代码中调用start()以及stop()开始或停止播放动画~
当然我们也可以在Java代码中创建逐帧动画,创建AnimationDrawable对象,
然后调用 addFrame(Drawable frame,int duration)向动画中添加帧,接着调用start()和stop()而已~。
下面我们来写两个例子体会下帧动画的效果以及熟悉下用法:
1、代码方式
package com.example;
public class MainActivity extends AppCompatActivity {
private ImageView iv_ani;
private AnimationDrawable mAnimationDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_ani = (ImageView) findViewById(R.id.iv_ani);
initAnimationDrawable();
}
private void initAnimationDrawable(){
mAnimationDrawable = new AnimationDrawable();
for (int i = 1; i <= 4; i++) {
int id = getResources().getIdentifier(“sample_” + i, “mipmap”, getPackageName());
Drawable drawable = getResources().getDrawable(id);
mAnimationDrawable.addFrame(drawable, 100);
}
mAnimationDrawable.setOneShot(false);
iv_ani.setImageDrawable(mAnimationDrawable);
}
}
通过AnimationDrawable的addFrame(Drawable frame, int duration) : 添加一帧,并设置该帧显示的持续时间。
2、xml方式
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@mipmap/img_zhuan1" android:duration="80" /> <item android:drawable="@mipmap/img_zhuan2" android:duration="80" /> <item android:drawable="@mipmap/img_zhuan3" android:duration="80" /> <!--限于篇幅,省略其他item,自己补上--> ... </animation-list
在Activity中设置Drawable并启动动画:
package com.example;
public class MainActivity extends AppCompatActivity {
private ImageView iv_ani;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv_ani = (ImageView) findViewById(R.id.iv_ani);
iv_ani.setImageDrawable(R.drawable.frame_animation);
AnimationDrawable animationDrawable = (AnimationDrawable) iv_ani.getDrawable();
animationDrawable.start();
}
}
在Drawable资源文件中创建文件frame_animation.xml。
优缺点
优点:目前这两种方式适合场景简单,图片资源较少的情况。
当动画要求酷炫复杂时,使用这两种方式会导致内存异常!
缺点:同时加载多张图片,占用内存资源比较大。
优化版:
网上资源都是通过自定义View实现帧动画,例如:FrameAniamtionView
效果如下:

总结
生产环境下不适合使用下原生提供的实现方式,容易产生问题。
推荐大家使用优化版自定义方式来实现帧动画,节约内存,
也不易发生OOM。注意一点bitmap用完不再使用时及时回收。
文章来源:https://xiuyuantech.github.io/2020/10/24/optimise-frame-animation/
业务咨询:https://soloist.pages.dev

本文来自投稿,不代表独立开发前线立场,如若转载,请注明出处:https://91wink.com/xiuyuantech-%e5%8d%9a%e5%ae%a2-%e8%87%aa%e5%ae%9a%e4%b9%89%e5%b8%a7%e5%8a%a8%e7%94%bb/