下面就开始各动画方式的介绍,首先介绍的是逐帧动画。
逐帧动画是Android中最简单的动画,主要你拥有动画的所有的静态图片,那么你就可以实现该动画。虽然该动画实现简单,但是却反映了动画的真正的本质,只不过在视图动画中,Android使用算法为你生成了给定时间段中的静态图片而已。
一、AnimationDrawable类的简单介绍
为了实现将图片逐帧播放的功能,Android提供了类AnimationDrawable,该类一般是作为某一个View的background来使用。虽然在AnimationDrawable类中提供addFrame函数来为该动画添加一帧图片,但是建议使用XML文件来为该动画配置图片,这样子更简单而且易于管理。
定义逐帧动画的XML文件非常的简单,只要在<animation-list.../>元素中使用<item.../>子元素定义动画的全部帧,并且制定各帧的持续时间即可(为了保证动画的流畅度,建议保证1秒24帧的速度播放,也就是说,动画持续时间最好小于1000/24)。所以得到逐帧动画的具体的定义格式如下:
<?xml version=1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot=["true"|"false"]>
<item android:drawable="@[package:]drawable/drawable_resource_name" android:duration="integer" />
</animation-list>
其中android:onshot控制该动画是否为循环播放,如果为true,则不会循环播放;否则就会循环播放。
那么在Android中是如何使用AnimationDrawable类来实现逐帧动画的呢?
其实AnimationDrawable就是一个Runnable,它其实就是启动一个线程来逐个显示动画中的静态图片,下面通过类中的几个函数就可以很容易明白这一点了。
run函数的定义:
public void run() {
nextFrame(false);
}
start函数的定义:
public void start() {
if (!isRunning()) {
run();
}
}
stop函数的定义:
public void stop() {
if (isRunning()) {
unscheduleSelf(this);
}
}