My blog

Add intelligent tagline here

[Android]AnimationDrawableが動かない

Androidでは、AnimationDrawableを使うことで複数の画像を組み合わせてアニメーションを作成することが出来ます。

しかし、onCreate()でアニメーションを開始しようとstart()を呼んでも、動いてくれません。

http://code.google.com/p/android/issues/detail?id=1818

によると、UIスレッドの問題ではなく、onCreate()が終わるまでLayout計算が終わらずActivityの初期化が終わらないために動かない、ということのようです。なので、Runnableを継承したクラスをpostすると初期化が行われた後に実行されるので動く、ということです。

具体的には、以下のように記述します。

@Override
public void onCreate(Bundle savedInstanceState) {
    // .... some code

    ImageView ani = (ImageView)findViewById(R.id.image);
    ani.setBackgroundResource(R.drawable.inprogress);
    ani.post(new Starter((AnimationDrawable) ani.getBackground()));
}

class Starter implements Runnable {
    AnimationDrawable mAnimation;
    public Starter (AnimationDrawable a){
     mAnimation = a;
    }
    public void run() {
     mAnimation.start();
    }
}

ちなみに、AnimationDrawableはImageViewのBackgroundだけじゃなくて、普通にsetImageResouceでも設定できます。