`
348725767
  • 浏览: 103987 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

android 实现3d旋转

阅读更多

通过继承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的旋转效果是出来了,至于如何精致,你可自由发挥。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics