使用Camera實現3D變換效果
最後來簡單介紹下android提供的android.graphics.Camera類,通過該類可以在2D條件下實現3D動畫效果,該類可以看做一個視圖顯示的3D空間,然後可以在裏面做各種操作。把上面的ViewAnimation修改爲如下實現可以具體看看Camera的功能:
- class ViewAnimation extends Animation {
- int mCenterX;//記錄View的中間座標
- int mCenterY;
- Camera camera = new Camera();
- public ViewAnimation() {
- }
- @Override
- public void initialize(int width, int height, int parentWidth,
- int parentHeight) {
- super.initialize(width, height, parentWidth, parentHeight);
- //初始化中間座標值
- mCenterX = width/2;
- mCenterY = height/2;
- setDuration(2500);
- setFillAfter(true);
- setInterpolator(new LinearInterpolator());
- }
- @Override
- protected void applyTransformation(float interpolatedTime,
- Transformation t) {
- // final Matrix matrix = t.getMatrix();
- // matrix.setScale(interpolatedTime, interpolatedTime);
- // //通過座標變換,把參考點(0,0)移動到View中間
- // matrix.preTranslate(-mCenterX, -mCenterY);
- // //動畫完成後再移回來
- // matrix.postTranslate(mCenterX, mCenterY);
- final Matrix matrix = t.getMatrix();
- camera.save();
- camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));
- camera.rotateY(360 * interpolatedTime);
- camera.getMatrix(matrix);
- matrix.preTranslate(-mCenterX, -mCenterY);
- matrix.postTranslate(mCenterX, mCenterY);
- camera.restore();
- }
- }
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次調用的時候interpolatedTime值爲0,相當於把ImageView在Z軸後移1300像素,然後逐步的往前移動到0,同時camera.rotateY(360 * interpolatedTime)函數又把ImageView沿Y軸翻轉360度,最終效果如下: