Android 卡片翻转效果使用的Cramre来完成

记录一下:

一个好用的3D旋转工具类

oid.graphics.Matrix;import android.util.Log;import android.view.animation.Animation;import android.view.animation.Transformation;/** * An animation that rotates the view on the Y axis between two specified angles. * This animation also adds a translation on the Z axis (depth) to improve the effect. */public class Rotate3dAnimation extends Animation {    private final float mFromDegrees;    private final float mToDegrees;    private final float mCenterX;    private final float mCenterY;    private final float mDepthZ;    private final boolean mReverse;    private Camera mCamera;    /**     * Creates a new 3D rotation on the Y axis. The rotation is defined by its     * start angle and its end angle. Both angles are in degrees. The rotation     * is performed around a center point on the 2D space, definied by a pair     * of X and Y coordinates, called centerX and centerY. When the animation     * starts, a translation on the Z axis (depth) is performed. The length     * of the translation can be specified, as well as whether the translation     * should be reversed in time.     *     * @param fromDegrees the start angle of the 3D rotation     * @param toDegrees the end angle of the 3D rotation     * @param centerX the X center of the 3D rotation     * @param centerY the Y center of the 3D rotation     * @param reverse true if the translation should be reversed, false otherwise     */    public Rotate3dAnimation(float fromDegrees, float toDegrees,            float centerX, float centerY, float depthZ, boolean reverse) {        mFromDegrees = fromDegrees;        mToDegrees = toDegrees;        mCenterX = centerX;        mCenterY = centerY;        mDepthZ = depthZ;        mReverse = reverse;    }    @Override    public void initialize(int width, int height, int parentWidth, int parentHeight) {        super.initialize(width, height, parentWidth, parentHeight);        mCamera = new Camera();    }    @Override    protected void applyTransformation(float interpolatedTime, Transformation t) {        final float fromDegrees = mFromDegrees;        float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);        final float centerX = mCenterX;        final float centerY = mCenterY;        final Camera camera = mCamera;        final Matrix matrix = t.getMatrix();        Log.i("interpolatedTime", interpolatedTime+"");        camera.save();        if (mReverse) {            camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);        } else {            camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));        }        camera.rotateY(degrees);        camera.getMatrix(matrix);        camera.restore();        matrix.preTranslate(-centerX, -centerY);        matrix.postTranslate(centerX, centerY);    }}



         oid.graphics.Matrix;     import android.util.Log;     import android.view.animation.Animation;     import android.view.animation.Transformation;     /** * An animation that rotates the view on the Y axis between two specified angles. * This animation also adds a translation on the Z axis (depth) to improve the effect. */     public     class Rotate3dAnimation extends Animation {     private     final     float mFromDegrees;     private     final     float mToDegrees;     private     final     float mCenterX;     private     final     float mCenterY;     private     final     float mDepthZ;     private     final     boolean mReverse;     private Camera mCamera;     /** * Creates a new 3D rotation on the Y axis. The rotation is defined by its * start angle and its end angle. Both angles are in degrees. The rotation * is performed around a center point on the 2D space, definied by a pair * of X and Y coordinates, called centerX and centerY. When the animation * starts, a translation on the Z axis (depth) is performed. The length * of the translation can be specified, as well as whether the translation * should be reversed in time. * * @param fromDegrees the start angle of the 3D rotation * @param toDegrees the end angle of the 3D rotation * @param centerX the X center of the 3D rotation * @param centerY the Y center of the 3D rotation * @param reverse true if the translation should be reversed, false otherwise */     public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ, boolean reverse) { mFromDegrees = fromDegrees; mToDegrees = toDegrees; mCenterX = centerX; mCenterY = centerY; mDepthZ = depthZ; mReverse = reverse; }     @Override     public void initialize(int width, int height, int parentWidth, int parentHeight) {     super.initialize(width, height, parentWidth, parentHeight); mCamera =     new Camera(); }     @Override     protected void applyTransformation(float interpolatedTime, Transformation t) {     final     float fromDegrees = mFromDegrees;     float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);     final     float centerX = mCenterX;     final     float centerY = mCenterY;     final Camera camera = mCamera;     final Matrix matrix = t.getMatrix(); Log.i(     "interpolatedTime", interpolatedTime+     ""); camera.save();     if (mReverse) { camera.translate(     0.0f,     0.0f, mDepthZ * interpolatedTime); }     else { camera.translate(     0.0f,     0.0f, mDepthZ * (     1.0f - interpolatedTime)); } camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } }     作者:亦枫 链接:https://www.jianshu.com/p/153d9f31288d 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。      


         oid.graphics.Matrix;     import android.util.Log;     import android.view.animation.Animation;     import android.view.animation.Transformation;     /** * An animation that rotates the view on the Y axis between two specified angles. * This animation also adds a translation on the Z axis (depth) to improve the effect. */     public     class Rotate3dAnimation extends Animation {     private     final     float mFromDegrees;     private     final     float mToDegrees;     private     final     float mCenterX;     private     final     float mCenterY;     private     final     float mDepthZ;     private     final     boolean mReverse;     private Camera mCamera;     /** * Creates a new 3D rotation on the Y axis. The rotation is defined by its * start angle and its end angle. Both angles are in degrees. The rotation * is performed around a center point on the 2D space, definied by a pair * of X and Y coordinates, called centerX and centerY. When the animation * starts, a translation on the Z axis (depth) is performed. The length * of the translation can be specified, as well as whether the translation * should be reversed in time. * * @param fromDegrees the start angle of the 3D rotation * @param toDegrees the end angle of the 3D rotation * @param centerX the X center of the 3D rotation * @param centerY the Y center of the 3D rotation * @param reverse true if the translation should be reversed, false otherwise */     public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ, boolean reverse) { mFromDegrees = fromDegrees; mToDegrees = toDegrees; mCenterX = centerX; mCenterY = centerY; mDepthZ = depthZ; mReverse = reverse; }     @Override     public void initialize(int width, int height, int parentWidth, int parentHeight) {     super.initialize(width, height, parentWidth, parentHeight); mCamera =     new Camera(); }     @Override     protected void applyTransformation(float interpolatedTime, Transformation t) {     final     float fromDegrees = mFromDegrees;     float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);     final     float centerX = mCenterX;     final     float centerY = mCenterY;     final Camera camera = mCamera;     final Matrix matrix = t.getMatrix(); Log.i(     "interpolatedTime", interpolatedTime+     ""); camera.save();     if (mReverse) { camera.translate(     0.0f,     0.0f, mDepthZ * interpolatedTime); }     else { camera.translate(     0.0f,     0.0f, mDepthZ * (     1.0f - interpolatedTime)); } camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } }     作者:亦枫 链接:https://www.jianshu.com/p/153d9f31288d 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。      


         oid.graphics.Matrix;     import android.util.Log;     import android.view.animation.Animation;     import android.view.animation.Transformation;     /** * An animation that rotates the view on the Y axis between two specified angles. * This animation also adds a translation on the Z axis (depth) to improve the effect. */     public     class Rotate3dAnimation extends Animation {     private     final     float mFromDegrees;     private     final     float mToDegrees;     private     final     float mCenterX;     private     final     float mCenterY;     private     final     float mDepthZ;     private     final     boolean mReverse;     private Camera mCamera;     /** * Creates a new 3D rotation on the Y axis. The rotation is defined by its * start angle and its end angle. Both angles are in degrees. The rotation * is performed around a center point on the 2D space, definied by a pair * of X and Y coordinates, called centerX and centerY. When the animation * starts, a translation on the Z axis (depth) is performed. The length * of the translation can be specified, as well as whether the translation * should be reversed in time. * * @param fromDegrees the start angle of the 3D rotation * @param toDegrees the end angle of the 3D rotation * @param centerX the X center of the 3D rotation * @param centerY the Y center of the 3D rotation * @param reverse true if the translation should be reversed, false otherwise */     public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ, boolean reverse) { mFromDegrees = fromDegrees; mToDegrees = toDegrees; mCenterX = centerX; mCenterY = centerY; mDepthZ = depthZ; mReverse = reverse; }     @Override     public void initialize(int width, int height, int parentWidth, int parentHeight) {     super.initialize(width, height, parentWidth, parentHeight); mCamera =     new Camera(); }     @Override     protected void applyTransformation(float interpolatedTime, Transformation t) {     final     float fromDegrees = mFromDegrees;     float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);     final     float centerX = mCenterX;     final     float centerY = mCenterY;     final Camera camera = mCamera;     final Matrix matrix = t.getMatrix(); Log.i(     "interpolatedTime", interpolatedTime+     ""); camera.save();     if (mReverse) { camera.translate(     0.0f,     0.0f, mDepthZ * interpolatedTime); }     else { camera.translate(     0.0f,     0.0f, mDepthZ * (     1.0f - interpolatedTime)); } camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } }     作者:亦枫 链接:https://www.jianshu.com/p/153d9f31288d 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。          
         oid.graphics.Matrix;     import android.util.Log;     import android.view.animation.Animation;     import android.view.animation.Transformation;     /** * An animation that rotates the view on the Y axis between two specified angles. * This animation also adds a translation on the Z axis (depth) to improve the effect. */     public     class Rotate3dAnimation extends Animation {     private     final     float mFromDegrees;     private     final     float mToDegrees;     private     final     float mCenterX;     private     final     float mCenterY;     private     final     float mDepthZ;     private     final     boolean mReverse;     private Camera mCamera;     /** * Creates a new 3D rotation on the Y axis. The rotation is defined by its * start angle and its end angle. Both angles are in degrees. The rotation * is performed around a center point on the 2D space, definied by a pair * of X and Y coordinates, called centerX and centerY. When the animation * starts, a translation on the Z axis (depth) is performed. The length * of the translation can be specified, as well as whether the translation * should be reversed in time. * * @param fromDegrees the start angle of the 3D rotation * @param toDegrees the end angle of the 3D rotation * @param centerX the X center of the 3D rotation * @param centerY the Y center of the 3D rotation * @param reverse true if the translation should be reversed, false otherwise */     public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ, boolean reverse) { mFromDegrees = fromDegrees; mToDegrees = toDegrees; mCenterX = centerX; mCenterY = centerY; mDepthZ = depthZ; mReverse = reverse; }     @Override     public void initialize(int width, int height, int parentWidth, int parentHeight) {     super.initialize(width, height, parentWidth, parentHeight); mCamera =     new Camera(); }     @Override     protected void applyTransformation(float interpolatedTime, Transformation t) {     final     float fromDegrees = mFromDegrees;     float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);     final     float centerX = mCenterX;     final     float centerY = mCenterY;     final Camera camera = mCamera;     final Matrix matrix = t.getMatrix(); Log.i(     "interpolatedTime", interpolatedTime+     ""); camera.save();     if (mReverse) { camera.translate(     0.0f,     0.0f, mDepthZ * interpolatedTime); }     else { camera.translate(     0.0f,     0.0f, mDepthZ * (     1.0f - interpolatedTime)); } camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } }     作者:亦枫 链接:https://www.jianshu.com/p/153d9f31288d 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。      


更多相关文章

  1. Android(安卓)Studio 自动生成注释(作者、日期、联系方式、描述)
  2. Android(安卓)渐变drawable背景
  3. Android不是一个商业成功的产品?
  4. 70个具有商业实战性的精品Android源码
  5. It's Android(安卓)Time—Google Android创赢路线与产品开发实战
  6. Android示例大全教学视频
  7. 学习资源
  8. 第一章 JAVA入门(什么是android)
  9. Android之输入银行卡号判断属于哪个银行

随机推荐

  1. Android(安卓)Studio 工程报错问题积累总
  2. Android(安卓)指定销毁一个Activity
  3. Android(安卓)oom pthread_create (1040K
  4. Android(安卓)P 横屏 部分应用宽度未占满
  5. android --相机使用详解概述
  6. 2011年沈大海讲师Android的新浪微博客户
  7. Android:使用JDBC链接MySQL数据库
  8. Android(安卓)中Activity,Window和View之
  9. Android(安卓)透明式系统栏设计
  10. Android尺寸标注设计大全和Android切图规