Frame动画是顺序播放图片来产生动画效果的,类似电影。例如,要实现一个人物走动的动画,可以通过三张图片来实现,第一张两脚都着地,第二张左脚着地,第三张右脚着地。然后,按顺序播放就实现任务行走的动画效果了。
Frame动画是通过AnimationDrawable类实现的,该类中的两个重要方法是start()和stop(),分别用来开始和停止动画。动画一般通过XML配置文件来进行配置,在工程的res/anim/目录下创建一个XML配置文件,该配置文件中有一个<animation-list>根元素和若干个<item>子元素。
下面通过一个实例来演示Frame动画的实现。该实例通过顺序播放6张图片来实现一个人跳起来的动画效果。6张静态图片如图1所示。

图1 Frame动画静态图片
实例步骤说明如下:
(1)创建一个工程“Graphic_Animation2”。
(2)在该工程的res/drawable/目录下添加上述6张资源文件。
(3)在该工程的res/anim/目录下创建一个XML动画文件,代码如代码清单1所示。
代码清单1 jump.xml
<animation-list xmlns:android="//schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/p01" android:duration="500"/>
<item android:drawable="@drawable/p02" android:duration="500"/>
<item android:drawable="@drawable/p03" android:duration="500"/>
<item android:drawable="@drawable/p04" android:duration="500"/>
<item android:drawable="@drawable/p05" android:duration="500"/>
<item android:drawable="@drawable/p06" android:duration="500"/>
</animation-list>
(4)在工程的res/layout/目录下创建一个main.xml布局文件,在该布局文件中添加两个Button:一个用来开始动画,另一个用来停止动画。添加一个ImageView显示动画。设置ImageView的背景色android:background="@anim/dance"。代码如代码清单2所示。
代码清单2 jump.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@anim/jump"
android:id="@+id/ImageView01"></ImageView>
<Button
android:layout_height="wrap_content"
android:text="Start..."
android:layout_width="wrap_content"
android:id="@+id/Button01"></Button>
<Button
android:layout_height="wrap_content"
android:text="Stop..."
android:layout_width="wrap_content"
android:id="@+id/Button02"></Button>
</LinearLayout>
(5)在MainActivity类中声明Button、ImageView和AnimationDrawable实例,在onCreate()方法中将其实例化。获得ImageView视图的背景色,并转化为AnimationDrawable对象。为按钮添加单击事件监听器,在事件方法中分别开始动画和结束动画。
代码清单3 MainActivity.java
package cn.com.farsight.graphic_Animation;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
//声明使用到的Button视图组件
private Button b1,b2;
//声明使用到的ImageView组件
private ImageView myImage;
//声明AnimationDrawable
private AnimationDrawable jumpAnimation;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//实例化视图组件
myImage=(ImageView) findViewById(R.id.ImageView01);
b1 = (Button) findViewById(R.id.Button01);
b2 = (Button) findViewById(R.id.Button02);
//获得背景色,并转换为AnimationDrawable对象
jumpAnimation = (AnimationDrawable) myImage.getBackground();
//为按钮添加监听事件
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//开始动画
jumpAnimation.start();
}
});
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//停止动画
jumpAnimation.stop();
}
});
}
}
程序运行结果如图2所示。

图2 Frame动画效果