zoukankan      html  css  js  c++  java
  • android 细节之 旋转动画


    Flip Animation for Android:


    近期项目中用到了一个小动画,让物体实现一定的3D旋转效果,现记录例如以下:


    public class FlipAnimation extends Animation {
        private Camera mCamera;
    
        private View mFromView;
        private View mToView;
    
        private float mCenterX;
        private float mCenterY;
    
        private boolean mForward = 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) {
            mFromView = fromView;
            mToView = toView;
    
            setDuration(700);
            setFillAfter(false);
            setInterpolator(new AccelerateDecelerateInterpolator());
        }
    
        public void reverse() {
            mForward = false;
            View switchView = mToView;
            mToView = mFromView;
            mFromView = switchView;
        }
    
        @Override
        public void initialize(int width, int height, int parentWidth, int parentHeight) {
            super.initialize(width, height, parentWidth, parentHeight);
            mCenterX = width / 2;
            mCenterY = height / 2;
            mCamera = new Camera();
        }
    
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            final double radians = Math.PI * interpolatedTime;
            float degrees = (float)(180.0 * radians / Math.PI);
    
            if (interpolatedTime >= 0.5f) {
                degrees -= 180.f;
                mFromView.setVisibility(View.GONE);
                mToView.setVisibility(View.VISIBLE);
            }
    
            if (mForward) {
                degrees = -degrees;
            }
    
            final Matrix matrix = t.getMatrix();
            mCamera.save();
            mCamera.rotateY(degrees);
            mCamera.getMatrix(matrix);
            mCamera.restore();
            matrix.preTranslate(-mCenterX, -mCenterY);
            matrix.postTranslate(mCenterX, mCenterY);
        }
    }
    


  • 相关阅读:
    vscode安装插件时报错
    css-flex整理
    java学习之路--String类的基本方法
    java学习之路--面试之并发基础
    java学习之路--面试之多线程基础
    java学习之路--多线程实现的方法
    java学习之路--简单基础的面试题
    java学习之路
    jquery中remove()和empty()是区别
    创建html新元素的三种方法
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/3940252.html
Copyright © 2011-2022 走看看