【android】用camera实现vi

发布时间:2019-08-30 08:31:09编辑:auto阅读(1552)

     

     使用Camera实现3D变换效果

    最后来简单介绍下android提供的android.graphics.Camera类,通过该类可以在2D条件下实现3D动画效果,该类可以看做一个视图显示的3D空间,然后可以在里面做各种操作。把上面的ViewAnimation修改为如下实现可以具体看看Camera的功能:
     
    1.  class ViewAnimation extends Animation {   
    2.        int mCenterX;//记录View的中间坐标   
    3.        int mCenterY;   
    4.        Camera camera = new Camera();   
    5.        public ViewAnimation() {   
    6.        }   
    7.     
    8.        @Override  
    9.        public void initialize(int width, int height, int parentWidth,   
    10.               int parentHeight) {   
    11.            super.initialize(width, height, parentWidth, parentHeight);   
    12.            //初始化中间坐标值   
    13.            mCenterX = width/2;    
    14.            mCenterY = height/2;   
    15.            setDuration(2500);   
    16.            setFillAfter(true);   
    17.            setInterpolator(new LinearInterpolator());   
    18.        }   
    19.     
    20.        @Override  
    21.        protected void applyTransformation(float interpolatedTime,   
    22.               Transformation t) {   
    23. //         final Matrix matrix = t.getMatrix();   
    24. //         matrix.setScale(interpolatedTime, interpolatedTime);   
    25. //         //通过坐标变换,把参考点(0,0)移动到View中间   
    26. //         matrix.preTranslate(-mCenterX, -mCenterY);   
    27. //         //动画完成后再移回来   
    28. //         matrix.postTranslate(mCenterX, mCenterY);   
    29.            final Matrix matrix = t.getMatrix();   
    30.            camera.save();   
    31.            camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));   
    32.            camera.rotateY(360 * interpolatedTime);   
    33.            camera.getMatrix(matrix);   
    34.            matrix.preTranslate(-mCenterX, -mCenterY);   
    35.            matrix.postTranslate(mCenterX, mCenterY);   
    36.            camera.restore();   
    37.        }   
    38.     }  
    camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次调用的时候interpolatedTime值为0,相当于把ImageView在Z轴后移1300像素,然后逐步的往前移动到0,同时camera.rotateY(360 * interpolatedTime)函数又把ImageView沿Y轴翻转360度,最终效果如下:
    下图是中移动的Ophone的截图,当然,同样兼容android,






关键字