Created
May 13, 2014 20:50
-
-
Save koocbor/69d5d0d60549f009b6a4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* copy from the internets: | |
* http://stackoverflow.com/questions/16030667/displaying-card-flip-animation-on-old-android | |
* | |
*/ | |
public class FlipAnimation extends Animation | |
{ | |
private Camera camera; | |
private View fromView; | |
private View toView; | |
private float centerX; | |
private float centerY; | |
private boolean forward = true; | |
/** | |
* Creates a 3D flip animation between two views. | |
* | |
* @param fromView First view in the transition. | |
* @param toView Second view in the transition. | |
*/ | |
public FlipAnimation(View fromView, View toView) | |
{ | |
this.fromView = fromView; | |
this.toView = toView; | |
setDuration(700); | |
setFillAfter(false); | |
setInterpolator(new AccelerateDecelerateInterpolator()); | |
} | |
public void reverse() | |
{ | |
forward = false; | |
View switchView = toView; | |
toView = fromView; | |
fromView = switchView; | |
} | |
@Override | |
public void initialize(int width, int height, int parentWidth, int parentHeight) | |
{ | |
super.initialize(width, height, parentWidth, parentHeight); | |
centerX = width/2; | |
centerY = height/2; | |
camera = new Camera(); | |
} | |
@Override | |
protected void applyTransformation(float interpolatedTime, Transformation t) | |
{ | |
// Angle around the y-axis of the rotation at the given time | |
// calculated both in radians and degrees. | |
final double radians = Math.PI * interpolatedTime; | |
float degrees = (float) (180.0 * radians / Math.PI); | |
// Once we reach the midpoint in the animation, we need to hide the | |
// source view and show the destination view. We also need to change | |
// the angle by 180 degrees so that the destination does not come in | |
// flipped around | |
if (interpolatedTime >= 0.5f) | |
{ | |
degrees -= 180.f; | |
fromView.setVisibility(View.GONE); | |
toView.setVisibility(View.VISIBLE); | |
} | |
if (forward) | |
degrees = -degrees; //determines direction of rotation when flip begins | |
final Matrix matrix = t.getMatrix(); | |
camera.save(); | |
camera.rotateY(degrees); | |
camera.getMatrix(matrix); | |
camera.restore(); | |
matrix.preTranslate(-centerX, -centerY); | |
matrix.postTranslate(centerX, centerY); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment