2015-11-24 114 views
4

我有一个片段,这表明进入动画,我设置过渡由如何知道输入过渡何时以片段结束?

this.setEnterTransition(transition); 

之后,我想显示另一个动画。但是我需要知道转换动画何时结束以开始第二个动画。

对于活动,有一个回调如onEnterAnimationComplete(),但它在分段过渡结束时不会调用。

有没有什么办法可以知道什么时候输入转换结束了片段?

回答

3
transition.addListener(new Transition.TransitionListener() { 
        @Override 
        public void onTransitionStart(Transition transition) {} 

        @Override 
        public void onTransitionEnd(Transition transition) {} 

        @Override 
        public void onTransitionCancel(Transition transition) {} 

        @Override 
        public void onTransitionPause(Transition transition) {} 

        @Override 
        public void onTransitionResume(Transition transition) {} 
       }); 

       this.setEnterTransition(transition); 
1

如果你有以下设置:

FragmentA与像

private final TransitionSet transition = new TransitionSet() 
     .addTransition(new ChangeBounds()); 
//... 
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container, fragment, fragment.getClass().getSimpleName()); 

transaction.addSharedElement(view, view.getTransitionName()); 
fragment.setSharedElementEnterTransition(transition); 
fragment.setSharedElementReturnTransition(transition); 
transaction.commit(); 

来监听SharedElementTransition在你的第二个片段末尾SharedElementEnterTransition调用FragmentB。然后,你必须得到SharedElementEnterTransition在FragmentB的onAttach像:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    TransitionSet transitionSet = (TransitionSet) getSharedElementEnterTransition(); 
    if (transitionSet != null) { 
     transitionSet.addListener(new Transition.TransitionListener() { 
      @Override 
      public void onTransitionEnd(@NonNull Transition transition) { 
       // remove listener as otherwise there are side-effects 
       transition.removeListener(this); 
       // do something here 
      } 

      @Override 
      public void onTransitionStart(@NonNull Transition transition) {} 
      @Override 
      public void onTransitionCancel(@NonNull Transition transition) {} 
      @Override 
      public void onTransitionPause(@NonNull Transition transition) {} 
      @Override 
      public void onTransitionResume(@NonNull Transition transition) {} 
     }); 
    } 
} 

正如指出的在this answer的意见有当没有设置在onAttach听众()的错误。