- 继承Animation类
- 覆写applyTransformation(),initialize()
public class ERTXYAnimation extends Animation {
/** 控件 */
private View mView = null;
/** 控件fromX */
private int mFormX = 0;
/** 控件fromY */
private int mFormY = 0;
/** 控件toX */
private int mToX = 0;
/** 控件toY */
private int mToY = 0;
public ERTXYAnimation(View view, float fromX, float fromY, float toX,
float toY) {
this.mView = view;
this.mFormX = (int) fromX;
this.mToX = (int) toX;
this.mFormY = (int) fromY;
this.mToY = (int) toY;
}
//在绘制动画的过程中会反复的调用applyTransformation 函数,每次调用参数interpolatedTime值都会变化,该参数从0渐变为1,当该参数为1时表明动画结束。通过参数Transformation 来获取变换的矩阵(matrix),通过改变矩阵就可以实现各种复杂的效果。
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int x = (int) (mFormX + ((mToX - mFormX) * interpolatedTime));
int y = (int) (mFormY + ((mToY - mFormY) * interpolatedTime));
ViewGroup.LayoutParams l = mView.getLayoutParams();
if (l instanceof AbsoluteLayout.LayoutParams) {
AbsoluteLayout.LayoutParams al = (AbsoluteLayout.LayoutParams) l;
al.x = x;
al.y = y;
mView.setLayoutParams(al);
mView.invalidate();//直接调用invalidate()方法,请求重新draw(),但只会绘制调用者本身。
} else {
Utils.printLog("ERTXYAnimation", "Not AbsoluteLayout! This Class can not handle it!!");
return;
}
}
//这是一个回调函数告诉Animation目标View的大小参数,在这里可以初始化一些相关的参数,例如设置动画持续时间、设置Interpolator、设置动画的参考点等。
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
}
Android中的补间动画分为下面几种:
(1)AlphaAnimation :透明度改变的动画。
(2)ScaleAnimation:大小缩放的动画。
(3)TranslateAnimation:位移变化的动画。
(4)RotateAnimation:旋转动画。