自定义动画,四种动画效果都是要继承 Animation
public class CustomAnimation extends Animation {
/**
* 粗略测试一下,宽高 *3 ,如果父容器宽高是屏幕大小,则是屏幕大小
* @param width 该容器的宽
* @param height 该容器的高
* @param parentWidth 父容器的宽
* @param parentHeight 父容器的高
*/
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
Log.i("test", width + " " + height + " " + parentWidth + " " + parentHeight);
super.initialize(width, height, parentWidth, parentHeight);
}
/**
* 启动此类就会不断的执行 applyTransformation 方法
*
* @param interpolatedTime 不管设定动画效果为多少秒, 它都会从 0 执行 到 1,float型, 用此参数就可以设置出动画效果
* @param t
*/
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
Log.i("test", interpolatedTime + " ");
//设置透明度
// t.setAlpha(interpolatedTime);
//设置旋转动画, 300,300 会一下子跳到 300,300坐标
// t.getMatrix().setTranslate(300, 300);
//设置旋转动画, 慢慢的旋转到 300,300坐标(指标秒数内)
// t.getMatrix().setTranslate(300 * interpolatedTime, 300 * interpolatedTime);
//左右摇摆 , 上下不动
//(float) (Math.sin(interpolatedTime*20)*50) x轴根据数学公式设定其左右摇摆, y轴 为0,表示不动
t.getMatrix().setTranslate((float) (Math.sin(interpolatedTime * 20) * 50), 0);
super.applyTransformation(interpolatedTime, t);
}
在MainActivity中:
CustomAnimation ca;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ca = new CustomAnimation();
ca.setDuration(1000);
findViewById(R.id.id).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
v.startAnimation(ca);
}
});
}