通过继承Animation动画类 封装了一个3d旋转的效果代码如下
import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.Transformation;
public class Rotatw3d extends Animation
{
private float mFromDegree;
private float mToDegree;
private float mCenterX;
private float mcenterY;
private float mleft;
private float mTop;
private Camera mCamera;
private static final String TAG="Rotate3d";
public Rotatw3d(float mFromDegree, float mToDegree, float mCenterX,
float mcenterY, float mleft, float mTop)
{
this.mFromDegree = mFromDegree;
this.mToDegree = mToDegree;
this.mCenterX = mCenterX;
this.mcenterY = mcenterY;
this.mleft = mleft;
this.mTop = mTop;
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight)
{
super.initialize(width, height, parentWidth, parentHeight);
mCamera=new Camera();
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
final float FromDegree =mFromDegree;
float degrees=FromDegree+(mToDegree-mFromDegree)*interpolatedTime;
final float centerX=mCenterX;
final float centerY=mcenterY;
final Matrix matrix=t.getMatrix();
if(degrees<=-76.0f)
{
degrees=-90.0f;
mCamera.save();
mCamera.rotateY(degrees);
mCamera.getMatrix(matrix);
mCamera.restore();
}
else if(degrees>=76.0f)
{
degrees=90.0f;
mCamera.save();
mCamera.rotateY(degrees);
mCamera.getMatrix(matrix);
mCamera.restore();
}
else
{
mCamera.save();
mCamera.translate(0, 0, centerX);
mCamera.rotateY(degrees);
mCamera.translate(0, 0, -centerX);
mCamera.getMatrix(matrix);
mCamera.restore();
}
matrix.preTranslate(-centerX, -centerX);
matrix.postTranslate(centerX, centerX);
}
}
简单的调用
Rotatw3d leftaction=new Rotatw3d(-0, -90, -100, -100, -100, -100);
leftaction.setFillAfter(true);
leftaction.setDuration(5000);
ImageView image=(ImageView)findViewById(R.id.image);
image.startAnimation(leftaction);
3d的旋转效果是出来了,至于如何精致,你可自由发挥。