安卓动画之帧动画(Frame Animations)

时间:2021-10-29 22:36:06

Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似

资源文件存放在项目res/drawable目录下

在Android中帧动画需要得到AnimationDrawable类的支持,下面简单介绍一下AnimationDrawable的常用方法:

void start():开始播放逐帧动画。void stop():停止播放逐帧动画。void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。int getDuration(int i):得到指定index的帧的持续时间。Drawable getFrame(int index):得到指定index的帧Drawable。int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。boolean isRunning():当前AnimationDrawable是否正在播放。void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放

1.创建帧动画

xml

<?xml version="1.0" encoding="utf-8"?>
<!--
根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
根标签下,通过item标签对动画中的每一个图片进行声明
android:duration 表示展示所用的该图片的时间长度
-->
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true"
>
<item android:drawable="@drawable/icon1" android:duration="150"></item>
<item android:drawable="@drawable/icon2" android:duration="150"></item>
<item android:drawable="@drawable/icon3" android:duration="150"></item>
<item android:drawable="@drawable/icon4" android:duration="150"></item>
<item android:drawable="@drawable/icon5" android:duration="150"></item>
<item android:drawable="@drawable/icon6" android:duration="150"></item>
</animation-list>

Java

private AnimationDrawable frameAnim;
frameAnim =new AnimationDrawable();
// 为AnimationDrawable添加动画帧
frameAnim.addFrame(getResources().getDrawable(R.drawable.img0), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img1), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img2), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img3), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img4), 50);
frameAnim.addFrame(getResources().getDrawable(R.drawable.img5), 50);<strong>
</strong>

1.使用帧动画

要显示动画,可以通过setBackgroundResource或setBackgroundDrawable方法将其设置为一个View的背景,然后调用它的start方法让动画运行起来

weather_icon_drawable.setBackgroundResource(R.drawable.weather_anim);
AnimationDrawable anim = (AnimationDrawable)weather_icon_drawable.getBackground();
anim.start();
同时停止动画可以调用stop方法

if (anim != null && anim.isRunning()) {
anim.stop();
}

其实还可以将动画设置为view的imageResource,这时动画不需要我们控制,会自动运行

weather_icon_drawable.setImageResource(R.drawable.weather_anim);
或者

android:src="@drawable/weather_anim"