Android动画之TweenAnimation

来源:互联网 发布:短网址生成源码 编辑:程序博客网 时间:2024/06/05 06:35

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动画照片动画。。。。。。

1 0
原创粉丝点击