Запуск анимации по кадрам

У меня есть основной вопрос о запуске кадровой анимации.

Когда я вызываю метод AnimationDrawable.start () из моего кода напрямую, он, похоже, не работает.

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

Но если я поместил эту строку внутри метода обратного вызова onClick (), нажатие на бутон запускает анимацию.

Почему эта строка не работает в коде?

Благодаря!

Код:

 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(); } 

}

Важно отметить, что метод start (), вызываемый в AnimationDrawable, не может быть вызван во время метода onCreate () вашей Activity, потому что AnimationDrawable еще не полностью привязан к окну. Если вы хотите немедленно воспроизвести анимацию, не требуя взаимодействия, вы можете вызвать ее из метода onWindowFocusChanged () в своей Activity, который вызывается, когда 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-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 для замены mFrameAnimation.start ();

 img.post(new Starter()); 

Внутренний класс помощника:

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

Для воспроизведения анимации только в onCreate (…) add:

 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(); } });