Android中的动画实现详解(2)

下面就开始各动画方式的介绍,首先介绍的是逐帧动画。

逐帧动画是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);
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1817bb8f0c634d0a943d1c7aa6cc54d1.html