android旋转动画和平移动画具体解释,补充说一下假设制作gif动画放到csdn博客上...
生活随笔
收集整理的這篇文章主要介紹了
android旋转动画和平移动画具体解释,补充说一下假设制作gif动画放到csdn博客上...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先上效果圖:
我這里用的是GifCam來制作的gif動畫,能夠在http://download.csdn.net/detail/baidu_nod/7628461下載,
制作過程是先起一個模擬器,然后把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移到原點后旋轉完再移動到如今的位置} }
假設是移動的話
<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动画放到csdn博客上...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 压缩和缓存设置
- 下一篇: 帝国cms文章页调用当前文章URL如何操