我有一个片段,这表明进入动画,我设置过渡由如何知道输入过渡何时以片段结束?
this.setEnterTransition(transition);
之后,我想显示另一个动画。但是我需要知道转换动画何时结束以开始第二个动画。
对于活动,有一个回调如onEnterAnimationComplete()
,但它在分段过渡结束时不会调用。
有没有什么办法可以知道什么时候输入转换结束了片段?
我有一个片段,这表明进入动画,我设置过渡由如何知道输入过渡何时以片段结束?
this.setEnterTransition(transition);
之后,我想显示另一个动画。但是我需要知道转换动画何时结束以开始第二个动画。
对于活动,有一个回调如onEnterAnimationComplete()
,但它在分段过渡结束时不会调用。
有没有什么办法可以知道什么时候输入转换结束了片段?
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);
如果你有以下设置:
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听众()的错误。