Существует этот рекурсивный способ, который лучше, чем использование обработчиков.
//CALL THIS WHEREVER YOU WANT
animate(500, R.layout.include_keyframe_2);
private void animate(final int delay, final int keyframe){
mConstraintSet.clone(this, keyframe);
AutoTransition transition = new AutoTransition();
transition.setStartDelay(delay);
transition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) { }
@Override
public void onTransitionEnd(Transition transition) {
int targetKeyframe;
switch (keyframe){
case R.layout.include_keyframe_2:
animate(1500, include_keyframe_3);
break;
case R.layout.include_keyframe_3:
animate(2500, include_keyframe_4);
break;
}
}
@Override
public void onTransitionCancel(Transition transition) { }
@Override
public void onTransitionPause(Transition transition) { }
@Override
public void onTransitionResume(Transition transition) { }
});
TransitionManager.beginDelayedTransition(mConstraintLayout, transition);
mConstraintSet.applyTo(mConstraintLayout);
}
Другое решение включает использование класса TransitionSet
. Это зависит от содержимого xml ключевых кадров.
mConstraintSet.clone(this, R.layout.example);
TransitionSet transition = new TransitionSet();
transition.setOrdering(TransitionSet.ORDERING_SEQUENTIAL);
transition
.addTransition(fadeOut)
.addTransition(changeBounds)
.addTransition(fadeIn);
TransitionManager.beginDelayedTransition(mConstraintLayout, transition);
mConstraintSet.applyTo(mConstraintLayout);