帧动画有着极其广泛的应用,也非常容易理解,其实就是简单的由N张静态图片收集起来,然后我们通过控制依次显示这些图片,因为人眼"视觉残留"的原因,会让我们造成动画的"错觉",跟放电影的原理一样!Android中展示这种形式一般有两种方式,一种用AnimationDrawable实现,另外一种直接引用GIF实现。本文就给阐述一下如何通过AnimationDrawable实现帧动画。
Android动画系列:
帧动画本质
将动画拆分为 帧
的形式,且定义每一帧 = 每一张图片,然后按序播放一组预先定义好的图片。
准备工作
既然是帧动画肯定需要一组图片,类似幻灯片一样,我们把每一张图片定义一个专属“组”内特定的名字,然后将这组图片资源放到drawable
中。
实现方式
这里我给大家介绍两种实现方法:
- 在XML中定义然后代码中调用
- 直接在代码中定义调用
其中xml创建的xml动画文件要放在res/drawable/
目录下。
在XML中定义然后代码中调用
1.在 /res/drawable 文件夹下建立一个名为 abunation_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/iron_1"
android:duration="200"/>
<item
android:drawable="@drawable/iron_2"
android:duration="200"/>
<item
android:drawable="@drawable/iron_3"
android:duration="200"/>
<item
android:drawable="@drawable/iron_4"
android:duration="200"/>
<item
android:drawable="@drawable/iron_5"
android:duration="200"/>
<item
android:drawable="@drawable/iron_6"
android:duration="200"/>
<item
android:drawable="@drawable/iron_7"
android:duration="200"/>
<item
android:drawable="@drawable/iron_8"
android:duration="200"/>
</animation-list>
其中oneshot属性,用于设置是否需要循环播放,true为仅播放一次,false 为连续的循环播放。
2.将其添加到ImageView中并启动动画
imageView = findViewById(R.id.image);
imageView.setImageResource(R.drawable.abunation_list);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();
直接在代码中定义调用
在代码中添加顾名思义,就是将要播放的图片集合,一张一张的添加到一个 AnimationDrawable 对象中去,接着再将其添加到 imageView 中,调用 start() 方法便能开始播放。AnimationDrawable同样也有一个OneShot()方法,用于设置是否需要循环播放。
imageView = findViewById(R.id.image);
AnimationDrawable animationDrawable1 = new AnimationDrawable();
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_1 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_2 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_3 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_4 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_5 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_6 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_7 ),200);
animationDrawable1.addFrame(getResources().getDrawable(R.drawable.iron_8 ),200);
animationDrawable1.setOneShot(true);
imageView_2.setImageDrawable(animationDrawable1);
animationDrawable1.start();
总结
Android帧动画相对简单一些,开发过程中可能有多个地方使用相同的帧动画,建议采用XML定义的形式去实现,可用于文件共享,当然也可以通过代码进行封装,另外如果动画相对比较复杂,可以采用GIF加载更简单一些。无论是通过一组图片定义的帧动画还是GIF引入都需要注意内存哦,可通过一些手段进行压缩处理一下。
最后
我是i猩人,总结不易,转载注明出处,喜欢本篇文章的童鞋欢迎点赞、关注哦。