2012-10-05 2 views
2
FragmentTransaction t = getFragmentManager().beginTransaction() ; 
      //left to right 
      t.setCustomAnimations(R.anim.left_to_right, R.anim.left_to_right_out); 

FragmentTransaction에 애니메이션이 있습니다. 애니메이션이 완료되면 또는 애니메이션 수신기를 알 수있는 방법이 있습니까?FragmentTransactions에서 애니메이션이 완료되면 알 수있는 방법이 있습니까?

+0

어쩌면이 질문에 대한 답변을 수 있습니다 : http://stackoverflow.com/questions/11120372/performing-action-after-fragment-transaction-animation-is-finished –

답변

0

저는 Fragments로 작업 한 적이 없지만 한 번 scrollView와 비슷한 문제가있었습니다. 스크롤이 언제 끝났는지 알고 싶었습니다. 아마도 당신이 할 수있는 일은 당신 자신의 리스너를 구현하는 것입니다. 당신은 runnable (animationTask)을 만들고 애니메이션이 끝났는지 아닌지를 결정하기 위해 어떤 조건이 충족되었는지 확인하기 위해 실행 가능한 체크를 할 수 있습니다.

이렇게하려면 FragmentTransaction을 확장하고 인터페이스 (사용자의 청취자가 됨)를 선언하는 자체 FragmentTransaction 클래스를 만들어야합니다. 당신이 넣어 줄 게시 된 코드 지금

public abstract class M_FragmentTransaction extends FragmentTransaction { 
private Runnable animationTask; 
public interface OnAnimationFinish{ 
    void onAnimationStopped(); 
} 

private OnAnimationFinish onAnimationFinishListener; 

public M_FragmentTransaction() { 
    super(); 
    animationTask = new Runnable() { 

     public void run() { 

      while(!SOMETHING_TO_DETERMINE_IF_HAS_STOPPED){//has stopped 

       if(onAnimationFinishListener!=null){ 

        onAnimationFinishListener.onAnimationStopped(); 
       } 
      } 
     } 
    }; 
} 

public void setOnAnimationFinish(OnAnimationFinish listener){ 
    onAnimationFinishListener = listener; 
} 

public void startAnimationStart(){ 

    animationTask.run(); 
} 

당신은하여 FragmentTransaction이 getFragmentManager()에서 반환 변환을 조사해야 들어 BeginTransaction().; 당신은 child = parent를 할 수 없으므로 M_FragmentTransaction으로 변환한다. 나는 이것이 가치가있는 것보다 더 큰 문제인지를 확신 할 수 없지만이 접근법은 나의 문제를 해결하는 데 도움이된다.

희망이 도움이됩니다.

+0

어떻게 트랜잭션 내 경우에는 내 자신의 트랜잭션을 만들 suppore 오전 FragmentManager가 만들었습니까? 귀하의 코드는 UI 스레드를 차단하고 있습니다. 나는 전혀 애니메이션이 없을 것입니다. 나는 애니메이션의 지속 시간을 알고 애니메이션이 끝났는지 짐작하지 않는다. 콜백이나 비슷한 것을 필요로한다. –

관련 문제