android旋转动画和平移动画详解,补充说一下如果制作gif动画放到

先上效果图:

我这里用的是GifCam来制作的gif动画,可以在下载,

制作过程是先起一个模拟器,然后把GifCam的框拖到模拟器上面,点击Rec的new先,然后点击Rec,然后就save到本地成gif文件

这里做一个左右旋转,上下旋转,和左右移动的动画,先自己建立一个View的类,作为操作的对象:

public class MyView extends View {private Paint mPaint;int width = 0;int height = 0;public MyView(Context context, AttributeSet attrs) {super(context, attrs);mPaint = new Paint();mPaint.setStrokeWidth(5);mPaint.setColor(Color.RED);this.setBackgroundColor(Color.RED);width = context.getResources().getDimensionPixelSize(R.dimen.width);height = context.getResources().getDimensionPixelSize(R.dimen.height);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//width 300 height 300canvas.drawLine(0, 0, width, 0, mPaint);canvas.drawLine(width, 0, width, height, mPaint);canvas.drawLine(width, height, 0, height, mPaint);canvas.drawLine(0, height, 0, 0, mPaint);canvas.save();}}左右旋转动画:public class RotateLeftRightAnimation extends Animation {private final float mFromDegrees;private final float mToDegrees;private final float mCenterX;private final float mCenterY;private final float mDepthZ;private final boolean mReverse;private Camera mCamera;private InterpolatedTimeListener listener;public RotateLeftRightAnimation(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ,boolean reverse) {mFromDegrees = fromDegrees;mToDegrees = toDegrees;mCenterX = centerX;mCenterY = centerY;mDepthZ = depthZ;mReverse = reverse;}public static interface InterpolatedTimeListener {public void interpolatedTime(float interpolatedTime);}public void setInterpolatedTimeListener(InterpolatedTimeListener listener) {this.listener = listener;}@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);mCamera = new Camera();}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {if (listener != null) {listener.interpolatedTime(interpolatedTime);}final float fromDegrees = mFromDegrees;float degrees = fromDegrees + ((mToDegrees – fromDegrees) * interpolatedTime);boolean overHalf = (interpolatedTime > 0.5f);if (overHalf) {degrees = degrees – 180;}final float centerX = mCenterX;final float centerY = mCenterY;final Camera camera = mCamera;final Matrix matrix = t.getMatrix();camera.save();if (mReverse) {camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);} else {camera.translate(0.0f, 0.0f, mDepthZ * (1.0f – interpolatedTime));}<span style="color:#ff0000;">camera.rotateY(degrees); //这个Y轴旋转就是左右旋转</span>camera.getMatrix(matrix);camera.restore();matrix.preTranslate(-centerX, -centerY);matrix.postTranslate(centerX, centerY);//这两句的意思是把View移到原点后旋转完再移动到现在的位置}}

如果是上线旋转就把camera.rotateY(degrees)改成camera.rotateX(degrees)

如果是移动的话

<span style="color:#330033;">public class MoveAnimation extends Animation {private Camera mCamera;private float mMoveDistance;private InterpolatedTimeListener listener;public MoveAnimation(float moveDistance) {mMoveDistance = moveDistance;}public static interface InterpolatedTimeListener {public void interpolatedTime(float interpolatedTime);}public void setInterpolatedTimeListener(InterpolatedTimeListener listener) {this.listener = listener;}@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);mCamera = new Camera();}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {if (listener != null) {listener.interpolatedTime(interpolatedTime);}final Camera camera = mCamera;final Matrix matrix = t.getMatrix();camera.save();camera.getMatrix(matrix);camera.restore();matrix.postTranslate(mMoveDistance, 0);}}</span>然后主程序这样来调用:final MyView myView = (MyView) findViewById(R.id.myview);Button btn = (Button) findViewById(R.id.btn_move);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {MoveAnimation anim = new MoveAnimation(200);anim.setDuration(500);myView.startAnimation(anim);}});Button btn_up_down_rotate = (Button) findViewById(R.id.btn_up_down_rotate);btn_up_down_rotate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {RotateUpDownAnimation anim = new RotateUpDownAnimation(0,180, v.getWidth() / 2, v.getHeight() / 2, 0, false);anim.setDuration(500);myView.startAnimation(anim);}});Button btn_left_right_rotate = (Button) findViewById(R.id.btn_left_right_rotate);btn_left_right_rotate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {RotateLeftRightAnimation anim = new RotateLeftRightAnimation(0,180, v.getWidth() / 2, v.getHeight() / 2, 0, false);anim.setDuration(500);myView.startAnimation(anim);}});

,你在潮湿的风中感受到了平稳的呼吸,多好听啊,

android旋转动画和平移动画详解,补充说一下如果制作gif动画放到

相关文章:

你感兴趣的文章:

标签云: