package architect.commons.transition; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import architect.ViewTransition; import architect.ViewTransitionDirection; /** * @author Lukasz Piliszczuk - lukasz.pili@gmail.com */ public abstract class ModalTransition<T extends View> implements ViewTransition<T, View> { protected Config config; public ModalTransition() { this(new Config().duration(300).interpolator(new AccelerateDecelerateInterpolator())); } public ModalTransition(Config config) { this.config = config; } @Override public void transition(final T enterView, final View exitView, ViewTransitionDirection direction, AnimatorSet set) { if (hideExitView()) { if (direction == ViewTransitionDirection.FORWARD) { set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { exitView.setVisibility(View.GONE); } }); } else { set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { enterView.setVisibility(View.VISIBLE); } }); } } } public abstract boolean hideExitView(); }