有两种方式
1、通过在xml定义一个animation-list:
- <?xml version="1.0" encoding="utf-8"?>
- <animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false"
- >
- <item android:drawable="@drawable/img01" android:duration="50" />
- <item android:drawable="@drawable/img02" android:duration="50" />
- <item android:drawable="@drawable/img03" android:duration="50" />
- <item android:drawable="@drawable/img04" android:duration="50" />
- </animation-list>
然后在Java中的代码处理如下:
- // Load the ImageView that will host the animation and
- // set its background to our AnimationDrawable XML resource.
- ImageView img = (ImageView)findViewById(R.id.spinning_wheel_image);
- img.setBackgroundResource(R.drawable.spin_animation);
- // Get the background, which has been compiled to an AnimationDrawable object.
- AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
- // Start the animation (looped playback by default).
- frameAnimation.start();
2、直接在代码中动态添加frame:
- animationDrawable = new AnimationDrawable();
- for(int i=1; i<5; i++) {
- int id = getResources().getIdentifier("img0" + i, "drawable", getPackageName());
- Log.d("DEBUG", "ID: " + id);
- Drawable drawable = getResources().getDrawable(id);
- animationDrawable.addFrame(drawable, 100);
- }
- imageView.setBackgroundDrawable(animationDrawable);
- animationDrawable.setOneShot(false);
在这里有一点需要注意的是AnimationDrawable的start()不能在直接在onClick,onStart,onResume里面启动,是无效的,无法启动动画,只能写在比如事件监听当中。下面有几种启动方法(这里参考http://www611.iteye.com/blog/1217096):
第一种方式启动帧动画:(在Activity启动时会自动运行动画)
- AnimationDrawable ad;
- ImageView iv = (ImageView) findViewById(R.id.animation_view);
- iv.setBackgroundResource(R.drawable.animation);
- ad = (AnimationDrawable) iv.getBackground();
- iv.getViewTreeObserver().addOnPreDrawListener(opdl);
- //当一个视图树将要绘制时产生事件,可以添加一个其事件处理函数
- OnPreDrawListener opdl=new OnPreDrawListener(){
- @Override
- public boolean onPreDraw() {
- ad.start();
- return true; //注意此行返回的值
- }
- };
第二种方式启动动画:(在Activity启动时会自动运行动画)
- ImageView image = (ImageView) findViewById(R.id.animation_view);
- image.setBackgroundResource(R.anim.oldsheep_wait);
- animationDrawable = (AnimationDrawable) image.getBackground();
- RunAnim runAnim=new RunAnim();
- runAnim.execute("");
- class RunAnim extends AsyncTask<String, String, String>
- {
- @Override
- protected String doInBackground(String... params) {
- if (!animationDrawable.isRunning()) {
- animationDrawable.stop();
- animationDrawable.start();
- }
- return "";
- }
- }
第三种方式启动动画:(在Activity启动时会自动运行动画)
- ImageView image = (ImageView) findViewById(R.id.animation_view);
- image.setBackgroundResource(R.anim.oldsheep_wait);
- animationDrawable = (AnimationDrawable) image.getBackground();
- image.post(new Runnable() {
- @Override
- public void run() {
- animationDrawable.start();
- }
- });
第四种方式启动动画:(在Activity启动时会自动运行动画)
- ImageView image = (ImageView) findViewById(R.id.animation_view);
- image.setBackgroundResource(R.anim.oldsheep_wait);
- animationDrawable = (AnimationDrawable) image.getBackground();
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- animationDrawable.start();
- super.onWindowFocusChanged(hasFocus);
- }
完整代码如下:
- package com.lau.frame;
- import android.app.Activity;
- import android.graphics.drawable.AnimationDrawable;
- import android.os.Bundle;
- import android.widget.ImageView;
- public class AnimationFrameDemoActivity extends Activity {
- private ImageView imageView;
- private AnimationDrawable animationDrawable;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- imageView = (ImageView) findViewById(R.id.imageView1);
- imageView.setBackgroundResource(R.drawable.frame_list);
- animationDrawable = (AnimationDrawable) imageView.getBackground();
- animationDrawable.start();
- // animationDrawable = new AnimationDrawable();
- // for(int i=1; i<5; i++) {
- // int id = getResources().getIdentifier("img0" + i, "drawable", getPackageName());
- // Log.d("DEBUG", "ID: " + id);
- // Drawable drawable = getResources().getDrawable(id);
- // animationDrawable.addFrame(drawable, 100);
- // }
- // imageView.setBackgroundDrawable(animationDrawable);
- // animationDrawable.setOneShot(false);
- // imageView.post(new Runnable() {
- // @Override
- // public void run() {
- // animationDrawable.start();
- // }
- // });
- }
- }