public class MyAnimation extends Animation { int mCenterX,mCenterY; Camera camera = new Camera(); public MyAnimation() { } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { Matrix matrix = t.getMatrix(); camera.save(); camera.translate(0f, 0f, (1300 - 1300*interpolatedTime)); camera.rotateY(360*interpolatedTime); camera.getMatrix(matrix); matrix.preTranslate(-mCenterX, -mCenterY); matrix.postTranslate(mCenterX,mCenterY); camera.restore(); } @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(2000); setFillAfter(true); setInterpolator(new LinearInterpolator()); } }
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次调用的时候interpolatedTime值为0,相当于把ImageView在Z轴后移1300像素,然后逐步的往前移动到0,同时camera.rotateY(360 * interpolatedTime)函数又把ImageView沿Y轴翻转360度