开始逐帧animation

我有一个关于开始逐帧animation的基本问题。

当我直接从我的代码调用AnimationDrawable.start()方法时,它似乎不工作。

public void onCreate(Bundle savedInstanceState) { ... mAnimation.start(); ... } 

但是如果我把这一行放在button的onClick()callback方法中,按下buton就会启动animation。

为什么这行代码不工作?

谢谢!

码:

 public class MyAnimation extends Activity { @Override public void onCreate(Bundle savedInstanceState) { AnimationDrawable mframeAnimation = null; super.onCreate(savedInstanceState); setContentView(R.layout.my_animation); ImageView img = (ImageView) findViewById(R.id.imgMain); BitmapDrawable frame1 = (BitmapDrawable) getResources().getDrawable( R.drawable.splash1); BitmapDrawable frame2 = (BitmapDrawable) getResources().getDrawable( R.drawable.splash2); int reasonableDuration = 250; mframeAnimation = new AnimationDrawable(); mframeAnimation.setOneShot(false); mframeAnimation.addFrame(frame1, reasonableDuration); mframeAnimation.addFrame(frame2, reasonableDuration); img.setBackgroundDrawable(mframeAnimation); mframeAnimation.setVisible(true, true); //If this line is inside onClick(...) method of a button, animation works!! mframeAnimation.start(); } 

}

注意在AnimationDrawable上调用的start()方法不能在Activity的onCreate()方法中调用,因为AnimationDrawable尚未完全附加到窗口。 如果您想要立即播放animation而不需要交互,那么您可能需要从Activity的onWindowFocusChanged()方法中调用该方法,这会在Android将窗口置于焦点时调用。 非常结束的页面http://developer.android.com/guide/topics/graphics/2d-graphics.html

  ImageView img = (ImageView)findViewById(R.id.some layout); AnimationDrawable frameAnimation = (AnimationDrawable)img.getDrawable(); frameAnimation.setCallback(img); frameAnimation.setVisible(true, true); frameAnimation.start(); 

并添加animation,你可以做类似的事情

 <animation-list android:id="@+id/my_animation" android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/frame1" android:duration="150" /> <item android:drawable="@drawable/frame2" android:duration="150" /> </animation-list> 

使用Runnable将start()消息插入消息队列,只需添加此LOC以replace您的mFrameAnimation.start();

 img.post(new Starter()); 

助手内部类:

 class Starter implements Runnable { public void run() { mFrameAnimation.start(); } } 

只要在onCreate(…)播放animation添加:

 ImageView mImageView=(ImageView) findViewById(R.id.image); mImageView.setBackgroundResource(R.anim.film); mFrameAnimation = (AnimationDrawable) mImageView.getBackground(); mImageView.post(new Runnable(){ public void run(){ mFrameAnimation.start(); } });