package info.guardianproject.securereaderinterface.uiutil; import android.view.Display; import android.view.View; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; public class ActivitySwitcher { private final static int DURATION = 500; private final static float DEPTH = 400.0f; /* ----------------------------------------------- */ public interface AnimationFinishedListener { /** * Called when the animation is finished. */ public void onAnimationFinished(); } /* ----------------------------------------------- */ public static void animationIn(View container, WindowManager windowManager) { animationIn(container, windowManager, null); } public static void animationIn(View container, WindowManager windowManager, AnimationFinishedListener listener) { apply3DRotation(90, 0, false, container, windowManager, listener); } public static void animationOut(View container, WindowManager windowManager) { animationOut(container, windowManager, null); } public static void animationOut(View container, WindowManager windowManager, AnimationFinishedListener listener) { apply3DRotation(0, -90, true, container, windowManager, listener); } /* ----------------------------------------------- */ private static void apply3DRotation(float fromDegree, float toDegree, boolean reverse, View container, WindowManager windowManager, final AnimationFinishedListener listener) { Display display = windowManager.getDefaultDisplay(); final float centerX = display.getWidth() / 2.0f; final float centerY = display.getHeight() / 2.0f; final Rotate3dAnimation a = new Rotate3dAnimation(fromDegree, toDegree, centerX, centerY, DEPTH, reverse); a.reset(); a.setDuration(DURATION); a.setFillAfter(true); a.setInterpolator(new AccelerateInterpolator()); if (listener != null) { a.setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) { } public void onAnimationRepeat(Animation animation) { } public void onAnimationEnd(Animation animation) { listener.onAnimationFinished(); } }); } container.clearAnimation(); container.startAnimation(a); } }