Android动画之TweenAnimation
上一篇博客中我们对Android中动画的分类进行了说明,本篇博客主要对View Animation视图动画,也就是TewwnAnimation进行讲解,它分为渐变动画AlphaAnimation、旋转动画RotateAnimation、缩放动画ScaleAnimation、位移动画TranslateAnimation。除了上述四种类型的动画讲解外,还会对Animation的监听事件SetAnimationListene和AnimationSet多动画集合进行讲解。
首先说一下渐变动画 AlphaAnimation,先上代码,通过代码进行讲解:
AlphaAnimation alphanimation = new AlphaAnimation(1f, 0.1f);
alphanimation.setDuration(3000);
alphanimation.setFillAfter(true);
alphanimation.setRepeatCount(5);
alphanimation.setRepeatMode(Animation.REVERSE);
image.startAnimation(alphanimation);
因为Animation是抽象类,项创建对象需要它的实现类AlphaAnimation,创建对象成功,直接通过view传入到startAnimation(TransFormaction,它就是一个转换运算的类)就可以进行转换、计算等。
在创建AlphaAnimation对象的时候,构造函数的两个参数分别代表初始透明度和停止时的透明度。它们的范围就是0f到1f
alphanimation.setDuration(3000);设置动画执行的时间
alphanimation.setFillAfter(true);设置动画停留在结束的位置
alphanimation.setRepeatCount(5);设置动画执行的次数,循环5次
alphanimation.setRepeatMode(Animation.REVERSE);设置动画的循环模式
旋转动画 RotateAnimation,先上代码,通过代码进行讲解:
RotateAnimation rotateanimation = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
rotateanimation.setRepeatCount(3);
rotateanimation.setDuration(3000);
image.startAnimation(rotateanimation);
旋转动画在对象的创建与渐变动画同理,这个和下面的我就不一一说明了。主要讲解构造函数中的参数。
第一个参数是旋转的初始角度,第二个参数是旋转所要到达的角度,第三个参数是旋转X轴对照的参照物,第四个参数是旋转X坐标,第五个参数是旋转Y轴对照的参照物,第六个参数是旋转Y轴的坐标。在记这几个参数的时候是有窍门的,旋转肯定需要一个中心点,参数要实现的就是找到那个相对的参照物,找到那个相对参照物上的点,相对于这个点就可以旋转了。可以把view的左上角看做0,0原点。总结旋转的内容就是找到中心轴
相关问题:上面的代码是让view围绕中心旋转360度,那如何让view实现左右摇摆呢。答:通过改变初始角度和停止时候角度这个两个参数,小伙伴们可以尝试一下。
缩放动画 RotateAnimation,先上代码,通过代码进行讲解:
ScaleAnimation scanimation=new ScaleAnimation(1f, 1.5f, 1f, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleanimation.setRepeatCount(3);
scaleanimation.setDuration(3000);
image.startAnimation(scaleanimation);
对象创建与上面相同,说一下具体的参数。
缩放动画也是要寻找一个可以围绕缩放的轴,轴的点不一样,缩放的位置也不一样。第一个参数是相对于x轴原来的大小,1f,第二个参数是相对于x轴变化的倍数,1.5f就是放大1.5倍。第三个参数是相对于y轴原来的大小,第四个参数是相对于y轴变化的倍数。,剩下的四个参数与旋转动画中是相同的,也是找到缩放的轴,定位具体的轴心。后四个参数发生改变缩放的轴心也就不同。
位移动画 TranslateAnimation,先上代码,通过代码进行讲解:
TranslateAnimation transanimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1f);
对于对象的声明还是同理,位移关注的时从初始位置到终点位置的变化,参数进行讲解,前两个参数是起点X轴的参照物和值,然后是终点的x轴参照物和值,然后是起点的y轴的参照物和值,然后是终点的y轴的参照物和值。
TweenAnimation中的四种动画讲解就到这里,但是以上这几种单一的动画有时候并不能满足我们的开发需求,有时候一个view可能需要多种动画,这时候我们查看Android中Animation的文档,发现还有AnimationSet没有使用过,它也是Animation的一个实现类,但是它含有add方法,可以添加上述4中类型的动画。
代码如下:AnimationSet sets=new AnimationSet(false);
然后可以声明上面所说的几种动画。
sets.add(ani1);
sets.add(ani2);
sets.add(ani3)
image.startAnimation(sets);
对于TweenAnimation动画,除了上面通过代码创建不同构造函数的对象外,还可以通过xml进行配置,简单说一下渐变的xml代码,这里就不一一讲解了代码如下:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="1000"
android:fromAlpha="0.1"
android:toAlpha="1.0" >
</alpha>
</set>
在代码中 Animation loadAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);
image.startAnimation(loadAnimation);
这里要特别注意的时xml文件的位置,是res/anim中,这是TweenAnimation。
还要补充说明一个Animation的监听事件,setAnimationListener,代码如下:
alpahAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation arg0) {
// TODO Auto-generated method stub
image.startAnimation(loadAnimation2);
}
});
其中的三个方法分别达标开始动画,重复动画,结束动画所执行的内容。
下一篇我们会讲解FrameAnimation动画照片动画。。。。。。