[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でも設定できます。