【android】用camera實現view的僞3D的效果

 

 使用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,






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章