2012-03-20 78 views
2

所以我一直在做一些閱讀過去幾個小時,我明白,在Drawable/ImageView完全附加之前調用AnimationDrawable的start()將不會啓動動畫。這看起來與通常的UI初始化過程非常一致(例如在添加視圖之後視圖的維度立即返回爲0)。在ListView項目中啓動AnimationDrawable。項目何時連接?

我想象一下,當我嘗試從適配器的getView()方法啓動動畫時,這個相同的問題是錯誤的。使用執行start()調用的延遲Runnable解決了這個問題,但顯然不是一個理想的解決方案。

一旦ListView的項目「完全附加」,有什麼辦法可以接收回調嗎?

+0

你有沒有嘗試覆寫[http://developer.android.com/reference/android/view/View.html#onAttachedToWindow()](http://developer.android.com/reference/android/view/View的.html#onAttachedToWindow())? – sastraxi 2012-03-23 18:16:43

回答

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

我試着開始在Viewpost()方法在Runnable動畫,並沒有奏效。上述方法是我可靠地以ListView開始動畫的唯一方法。