AlphaAnimation:透明度变化动画
RotateAnimation:旋转动画
ScaleAnimation: 缩放动画
TranslateAnimation:位置变化动画
但这是不够的,很多时候我们需要实现自己的动画,查看任何一个类的源码,比如AlphaAnimation,可以发现他们都是继承自Animation基类,并且都重写了initialize,applyTransformation方法。于是我们也按部就班的做,一般来说applyTransformation方法是必须重写的。
一个最简单控制透明度变化的动画:
class AlphaAnimation extends Animation { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { t.setAlpha(interpolatedTime); } }
一个左右抖动的动画,当然也可以使用android自带的那个抖动。
/** * 左右抖动 * @author reyo * */ class ShakeAnimation extends Animation { private int shakeTimes=7;//摇摆次数 private int shakeRange=50;//摇摆幅度 public ShakeAnimation(){ } public ShakeAnimation(int shakeTimes,int shakeRange){ this.shakeTimes = shakeTimes; this.shakeRange = shakeRange; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); } @Override protected void applyTransformation(float interpolatedTime,Transformation t) { int dx=(int)(shakeRange*Math.sin(interpolatedTime*Math.PI*shakeTimes)); int dy=0; t.getMatrix().setTranslate(dx,dy); } }
控制小球做圆周运动的动画,可以实现类似火星,金星,地球围绕太阳转的效果。
/** * 圆周运动 * @author reyo * */ class CircleAnimation extends Animation { private int r=100;//旋转半径 private int angle=360;//旋转角度 public CircleAnimation(){ } public CircleAnimation(int r,int angle){ this.r = r; this.angle = angle; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); } @Override protected void applyTransformation(float interpolatedTime,Transformation t) { int dx=(int)(r*Math.cos(interpolatedTime*Math.PI*angle/180)); int dy=(int)(r*Math.sin(interpolatedTime*Math.PI*angle/180)); t.getMatrix().setTranslate(dx,dy); } }
如果你数学学的足够好,那么可以实现更复杂的动画,我这里只是运用了几个简单的sin,cos罢了,点到为止!