package com.wealthfront.magellan.transitions; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.util.Property; import android.view.View; import com.wealthfront.magellan.Direction; import com.wealthfront.magellan.NavigationType; import static com.wealthfront.magellan.Direction.BACKWARD; import static com.wealthfront.magellan.Direction.FORWARD; public class DefaultTransition implements Transition { @Override public final void animate(View from, View to, NavigationType navType, Direction direction, final Callback callback) { AnimatorSet animator = createAnimator(from, to, navType, direction); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { callback.onAnimationEnd(); } }); animator.start(); } private AnimatorSet createAnimator(View from, View to, NavigationType navType, Direction direction) { Property<View, Float> axis; int fromTranslation; int toTranslation; int sign = direction.sign(); switch (navType) { case GO: axis = View.TRANSLATION_X; fromTranslation = sign * -from.getWidth(); toTranslation = sign * to.getWidth(); break; case SHOW: axis = View.TRANSLATION_Y; fromTranslation = direction == FORWARD ? 0 : from.getHeight(); toTranslation = direction == BACKWARD ? 0 : to.getHeight(); break; default: axis = View.TRANSLATION_X; fromTranslation = 0; toTranslation = 0; break; } AnimatorSet set = new AnimatorSet(); if (from != null) { set.play(ObjectAnimator.ofFloat(from, axis, 0, fromTranslation)); } set.play(ObjectAnimator.ofFloat(to, axis, toTranslation, 0)); return set; } }