Android的动画分两种,一种是Tween动画,实现视图的平移,缩放,旋转和淡入淡出的效果
1.RotateAnimation旋转动画
RotateAnimation rotat=new RotateAnimation(0, 180,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
rotat.setDuration(400);
rotat.setFillAfter(true);
mCollapse.startAnimation(rotat);
RotateAnimation rotat=new RotateAnimation(0, 180,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
第二个参数:结束旋转的角度
后面四个参数是确定旋转圆心的位置
第三个参数:旋转圆心X轴的坐标类型,分别为ABSOLUTE绝对坐标,RELATIVE_TO_SELF相对于自身坐标,RELATIVE_TO_PARENT相对于父控件坐标
(默认是ABSOLUTE绝对坐标)
第四个参数:旋转圆心X轴的坐标值
第五个参数:旋转圆心Y轴的坐标类型,分别为ABSOLUTE绝对坐标,RELATIVE_TO_SELF相对于自身坐标,RELATIVE_TO_PARENT相对于父控件坐标
(默认是ABSOLUTE绝对坐标)
第六个参数:旋转圆心Y轴的坐标值
rotat.setDuration(400);
设置动画的时间
rotat.setFillAfter(true);
设置动画结束后,保持住动画结束时候的状态
这个示例旋转动画的效果是,以自己的中心为圆心,顺时针旋转180,动画时间为400ms,动画结束后保持旋转后的状态
2.TranslateAnimation平移动画
TranslateAnimation animationDown=new TranslateAnimation(0, 0, 0, listView.getHeight()-image.getTop());
animationDown.setDuration(400);
animationDown.setFillAfter(true);
image.startAnimation(animationDown);
这里的X,Y轴的坐标差值,都是以这个view的中心为坐标原点,往右是X轴正方向,往下为Y轴的正方向
需要说明的是,这个坐标原点是始终不变的,即使这个view已经平移,这个坐标原点还是原来那个
TranslateAnimation animationDown=new TranslateAnimation(0, 0, 0, listView.getHeight()-image.getTop());
第一个参数:动画开始位置在X轴,相对于坐标原点的差值
第二个参数:动画结束位置在X轴,相对于坐标原点的差值
第三个参数:动画开始位置在Y轴,相对于坐标原点的差值
第四个参数:动画结束位置在Y轴,相对于坐标原点的差值
这个示例平移动画的效果是,从image的坐标原点开始,X轴的位置不变,往Y轴正方向平移listView.getHeight()-image.getTop(),动画时间400ms,image停留在动画结束的位置(但是坐标原点还是原来那个)
3.ScaleAnimation缩放动画
ScaleAnimation scaleAnimation=new ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RESTART,0.5f);
scaleAnimation.setDuration(400);
scaleAnimation.setFillAfter(true);
image.startAnimation(scaleAnimation);
前面四个参数的大小,都是相对与自身大小的伸缩倍数
第一个参数:动画开始时,view在X轴上的伸缩尺寸
第二个参数:动画结束时,view在X轴上的伸缩尺寸
第三个参数:动画开始时,view在Y轴上的伸缩尺寸
第四个参数:动画结束时,view在Y轴上的伸缩尺寸
后面四个参数确定动画开始的X和Y轴的位置,以这个view的中心为坐标原点
第五个参数:动画相对于view在X轴上的位置类型第六个参数:动画相对于view在X轴上的开始位置
第七个参数:动画相对于view在Y轴上的位置类型
第八个参数:动画相对于view在Y轴上的开始位置
这个示例缩放动画的效果是,在X轴和Y轴上,从坐标中心到相对于自身大小一半的位置开始缩放0.5倍,看上去的效果就是这个view自身原点缩小一倍。
4.AlphaAnimation淡入淡出动画
AlphaAnimation alphaAnimation=new AlphaAnimation(1.0f, 0.5f);
alphaAnimation.setDuration(400);
alphaAnimation.setFillAfter(true);
view.startAnimation(alphaAnimation);
AlphaAnimation alphaAnimation=new AlphaAnimation(1.0f, 0.5f); //淡化效果范围是1.0-0.0
第一个参数:动画开始时的淡化值
第二个参数:动画结束时的淡化值
这个示例缩放动画的效果是,这个view从1.0f淡化到0.5f
默认动画都是匀速变化的,我们可以指定四种Interpolator来定义动画的变化速率
1.AccelerateInterpolator,在动画开始的时候速率变化比较慢,然后开始加速
2.DecelerateInterpolator,在动画开始的时候速率变化比较慢,然后开始减速
3.AccelerateDecelerateInterpolator,在动画开始的开始和结束的时候速率变化比较慢,中间的时候速率变化加快
4.LinearInterpolator,动画匀速变化
5.CycleInterpolator,动画循环播放特定速率,速率改变沿着正弦曲线
我们只需要一行代码就可以设置动画改变速率
animation.setInterpolator(new AccelerateInterpolator());