导语
Android的动画框架包括帧动画、视图动画(又叫补间动画)、属性动画。
在Android3.0之前,视图动画一家独大,但随之后属性动画框架被推出。相比属性动画,视图动画一个非常大的缺陷就是不具备交互性。当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互发生,且效率较高使用方便。
视图动画(Animation)
Animation框架定义了透明度(alpha)、旋转(rotate)、缩放(scale)、位移(translate)四种常见的动画,而且是控制整个View的显示效果。
Animation原理
当View被执行视图动画,每次重复绘制该视图时,View 所在的 ViewGroup 中的 drawChild 函数获取该View的Animation的Transformation(改变值),然后调用 canvas.concat() 通过矩阵运算成功画帧。如果动画没有完成,就继续调用 invalidate() 函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。
Animation方式
设置View透明(alpha)
AlphaAnimation aa=new AlphaAnimation(0,1);
aa.setDuration(1000);
view.startAnimation(aa);
设置View旋转(rotate)
RotateAnimation ra = new RotateAnimation(0,360, RoatateAnimation.RELATIVE_TO_SELF,0.5F,RoatateAnimation.RELATIVE_TO_SELF,0.5F);
ra.setDuration(1000);
view.startAnimation(ra);
设置View缩放(scale)
ScaleAnimation sa = new ScaleAnimation(0,1,0,1,RoatateAnimation.RELATIVE_TO_SELF,0.5F,RoatateAnimation.RELATIVE_TO_SELF,0.5F);
sa.setDuration(1000);
view.startAnimation(sa);
设置View位移(translate)
TranslateAnimation ta=new TranslateAnimation(0,200,0,300);
ta.setDuraton(1000);
view.startAnimation(ta);
也可以设置View动画集合:
AnimationSet as =new AnimationSet(true);
as.setDuration(1000);
AlphaAnimation aa=new AlphaAnimation(0,1);
aa.setDuration(1000);
as.addAnimation(aa);
TranslateAnimation ta=new TranslateAnimation(0,200,0,300);
ta.setDuraton(1000);
as.addAnimation(ta);
view.startAnimation(as);
设置视图动画监听事件
animation.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation animation){//动画开始执行
}
@Override
public void onAnimationEnd(Animation animation){//动画执行结束
}
@Override
public void onAnimationRepeat(Animation animation){
//动画重复执行时调用
}
});