2012-03-20 2 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

답변

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).

관련 문제