How to know when Shared Element Transition ends
Did you try to bind animation listener to the shared element view inside onMapSharedElements
? ViewCompat.animate(view)
will give you either a new or cached ViewPropertyAnimator(Compat)
and then binding the animation listener should be trivial. I haven't tried it, though.
setEnterSharedElementCallback(new SharedElementCallback() { @Override public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { super.onMapSharedElements(names, sharedElements); View keySharedElementView = sharedElements.get("keySharedElement"); if(keySharedElementView != null){ ViewCompat.animate(keySharedElementView).setListener(new ViewPropertyAnimatorListenerAdapter(){ @Override public void onAnimationEnd(View view) { super.onAnimationEnd(view); } }); } } });
What about adding Transition.Listener
to the shared element transition?
Transition sharedElementEnterTransition = getWindow().getSharedElementEnterTransition(); sharedElementEnterTransition.addListener(new TransitionListenerAdapter() { @Override public void onTransitionEnd(android.support.transition.Transition transition) { super.onTransitionEnd(transition); } });
Please try onEnterAnimationComplete()
callback on your activity.
I bet this is exactly what you ere looking for.
@Override public void onEnterAnimationComplete() { super.onEnterAnimationComplete(); //your code }
Here is what I do in a fragment:
Transition sharedElementEnterTransition = getActivity().getWindow().getSharedElementEnterTransition(); sharedElementEnterTransition.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) { } });