2012-03-20 2 views
2

私は過去数時間にわたりいくつかの読書をしてきましたが、Drawable/ImageViewが完全にアタッチされる前にAnimationDrawableでstart()を呼び出すとアニメーションが開始されないことを理解しています。これは、通常のUI初期化プロセス(ビューの次元がビューを追加した直後に0として返されるようなもの)とかなり一致しているようです。ListViewアイテムでAnimationDrawableを開始しています。アイテムはいつ添付されますか?

アダプターのgetView()メソッドからアニメーションを開始しようとすると、同じ問題が発生していないと思います。 start()呼び出しを実行する遅延ランナブルを使用すると、この問題は解決されますが、明らかに望ましい解決策ではありません。

ListViewのアイテムが「完全に接続」されていれば、コールバックを受け取る方法はありますか?

+0

[http://developer.android.com/reference/android/view/View.html#onAttachedToWindow()](http://developer.android.com/reference/android/view/View)をオーバーライドしましたか? .html#onAttachedToWindow())? – sastraxi

答えて

4

documentationによれば、アニメーションを開始する前にウィンドウにViewが添付されるまで待つ必要があります。そのため、添付されたときに実行されるビューにOnAttachStateChangeListenerを追加し、そこからアニメーションを開始する必要があります。

ImageView loadingImg = (ImageView)v.findViewById(R.id.image); 
loadingImg.setBackgroundResource(R.drawable.progressdialog); 
loadingImg.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { 
    @Override 
    public void onViewAttachedToWindow(View v) { 
    AnimationDrawable loadingAnimation = (AnimationDrawable) v.getBackground(); 
    loadingAnimation.start(); 
    } 

    @Override 
    public void onViewDetachedFromWindow(View v) { 
    } 
}); 

私はViewさんpost()方法でRunnableでアニメーションを開始しようとした、それは動作しませんでした。上のメソッドは、私が確実にListViewでアニメーションを開始させてきた唯一の方法です。

関連する問題