【Android】学习笔记(11)——Animation使用方法(上)

//从下向上,淡入淡出

AnimationSet aniSet = new AnimationSet(false);
Animation tranAni = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f);
tranAni.setDuration(POPDOWN_ANI_DURATION);
tranAni.setInterpolator(new DecelerateInterpolator());

// Animation alphaAni = new AlphaAnimation(1.0f, 0f);
// alphaAni.setDuration(POPUP_ANI_DURATION);

aniSet.addAnimation(tranAni);
// aniSet.addAnimation(alphaAni);
aniSet.setFillAfter(true);
aniSet.setAnimationListener(this);



Andriod 的Animations可以从形式上分为两大类,分别是 Tweened Animations 和Frame-By-Frame Animations。Tweened Animations可以理解为补间动画,也就是某一张图或者其他对象,进行旋转、变形等动画;而Frame-By-Frame Animations是多张图片或对象,进行一帧一帧的变化。简单而也,前者是本身改变的动画,后者是与其他内容的交替显示形成的动画。

 
Tweened Animations有 4种样式,分别为Alpha,Rotate,Translate,Scale。分别表示渐变,旋转,位移,缩放。要实现以上4种动画,必须要给出每种动画的需要参数。
Alpha:因为是渐变,所以需要给出改变之前的透明度,改变之后的透明度,总共改变的时间。
Rotate:旋转,必定要知道旋转的圆心在哪边,所以要定义圆心的 X与Y轴,以及转动的时间,转动的角度等。
Translate:位移,即要知道原来对象的 XY轴和改变后的XY轴,以及运动的时间等。
Scale:缩放,首先要知道 XY轴缩放的比率,以及缩放前后中心坐标的变化,当然还有缩放的时间。
 
使用 Animation还需要知道一些知识点:
Interpolator:它定义了动画的速率,它有若干子类, AccelerateDecelerateInterpolator是两头慢,中间快的动画效果, AccelerateInterpolator是加速的动画效果,DecelerateInterpolator是减速动画效果, LinearInterpolator是匀速动画效果,等等。这些加速效果可以根据实际的需求来使用。
AnimationSet:它是 Animation的一个集合,可以将定义好的各个动画,放入AnimationSet集合中,然后再进行对集合的设置,控制集合内的动画如何运行。
 

Tweened Animations的实现

Tweened Animations实现有两种方式,一种为在 Java代码中设置,另一种为在XML文件中设置。两种方式各有优劣,下面一一介绍。

Tweened Animations的第一种实现:

我们的例子是 Activity上有4个按钮和一张图片,4个按钮分别代表上面的四种动画效果。
布局文件很简单,就是 4个按钮和一张图片的定义设置,在此略去,附件中可见详情。
Java代码中,我们为每个按钮绑定了监听器。
Alpha监听器:
 
 
  1. class AlphaOnClickListener implements OnClickListener{ 
  2.        @Override 
  3.        public void onClick(View arg0) { 
  4.            // TODO Auto-generated method stub 
  5.  
  6.            AnimationSet animationSet = new AnimationSet(true);//创建一个Animation的集合,这里构造函数的参数是个boolean值,他表示的是这个AnimationSet中是否共享一个Interpolator,也就是在这个集合内不同的动画是否以同样地速率变化,如果为false,那么下面需要对每一个动画进行Interpolator的设置。 
  7.            AlphaAnimation alphaAnimation = new AlphaAnimation(1,0);//设置从不透明到透明,这里两个参数的取值为0~1,0表示完全透明,1表示完全不透明 
  8.  
  9.            alphaAnimation.setDuration(2000);//设置动画的时间为2秒 
  10.            animationSet.addAnimation(alphaAnimation);//将创建的alphaAnimation加入Animation集合中 
  11.            item.startAnimation(animationSet);//在ImageView上设置动画 
  12.        } 
  13.     } 
Rotate监听器:
 
 
  1. class RotateOnClickListener implements OnClickListener{ 
  2.        @Override 
  3.        public void onClick(View arg0) { 
  4.            // TODO Auto-generated method stub 
  5.  
  6.            AnimationSet animationSet = new AnimationSet(true);//同上 
  7.            RotateAnimation rotateAnimation = new RotateAnimation(0360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
  8.  
  9. //RotateAnimation有6个参数 
  10. //1.初始的角度 
  11. //2.旋转的角度,可以为负的,即为逆时针转 
  12. //3.转的圆心的X坐标是相对谁为参照物的,这里有3种情况:RELATIVE_TO_SELF,RELATIVE_TO_PARENT,ABSOLUTE,分别是相对自己,相对父控件,绝对位置
  13. //4.具体的X坐标,与第三个参数有关,若第3个参数是Animation.RELATIVE_TO_SELF,第四个参数是0.5f,那么圆心的X坐标就是自身控件宽度的0.5倍 
  14. //5.转的圆心的Y坐标是相对谁为参照物,参数同3 
  15. //6. 具体的Y坐标,与第三个参数有关,若第3个参数是Animation.RELATIVE_TO_SELF,第四个参数是0.5f,那么圆心的Y坐标就是自身控件宽度的0.5倍 
  16.            rotateAnimation.setDuration(2000);//设置动画的时间 
  17.            animationSet.addAnimation(rotateAnimation);//将创建的alphaAnimation加入Animation集合中 
  18.            item.startAnimation(animationSet);//在ImageView上设置动画 
  19.        } 
  20.     } 
Translate监听器:

 
 
  1. class TranslateOnClickListener implements OnClickListener{ 
  2.        @Override 
  3.        public void onClick(View arg0) { 
  4.            // TODO Auto-generated method stub 
  5.  
  6.            AnimationSet animationSet = new AnimationSet(true);//创建一个Animation的集合 
  7.            TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,1f); 
  8.  
  9. //第1,2个参数是变化之前的X坐标 
  10. //第3,4个参数是变化之后的X坐标 
  11. //第5,6个参数是变化之前的Y坐标 
  12. //第7,8个参数是变化之后的Y坐标 
  13.            translateAnimation.setDuration(2000);//设置动画的时间 
  14.            animationSet.addAnimation(translateAnimation);//将创建的alphaAnimation加入Animation集合中 
  15.            item.startAnimation(animationSet);//在ImageView上设置动画 
  16.        } 
  17.     } 
Scale监听器:

 
 
  1. class ScaleOnClickListener implements OnClickListener{ 
  2.        @Override 
  3.        public void onClick(View arg0) { 
  4.            // TODO Auto-generated method stub 
  5.  
  6.            AnimationSet animationSet = new AnimationSet(true);//同上 
  7.            ScaleAnimation scaleAnimation = new ScaleAnimation(10.1f,1,0.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
  8.  
  9.              //第1个参数是X的原始比率,第2个参数是X变化后的比率 
  10.            //第3个参数是Y的原始比率,第4个参数是Y变化后的比率 
  11.            //第5,6个参数是最后动画结束时的X轴坐标 
  12.            //第7,8个参数是最后动画结束时的Y轴坐标 
  13.            scaleAnimation.setDuration(2000);//设置动画的时间 
  14.            animationSet.addAnimation(scaleAnimation);//将创建的alphaAnimation加入Animation集合中 
  15.            item.startAnimation(animationSet);//在ImageView上设置动画 
  16.        } 
  17.     } 

以上是Tweened Animations的基本使用,当然还有其他的设置,比如设置延迟动画可以使用对Animation或AnimationSet设置setStartOffset(long time)等。

 

Tweened Animations的第二种实现:

使用 XML文件来对动画进行定义和设置,首先要在res目录下建立anim文件夹,在这个文件夹下面就放置一个我们定义的XML文件,而且,每个XML文件都是以如下为标签:
 
 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:interpolator="@android:anim/accelerate_interpolator" 
  4. >  
  5. </set> 
我们将要定义的动画放在 set标签中,里面的android:interpolator属性就是定义了这个set中的动画是以什么速率进行变化的,它的值是android自带的,可以再Android API中查到。
看一下上述 4中动画的定义:
 
 
 
  1. <alpha 
  2.     android:fromAlpha="1.0"//初始透明度 
  3.     android:toAlpha="0.0"//结束透明度 
  4.     android:duration="3000"//时长 
  5. ></alpha> 
  6. <rotate 
  7.     android:fromDegrees="0"//初始旋转角度 
  8.     android:toDegrees="-360"//结束旋转角度,可为负,即逆时针 
  9.     android:duration="3000"//时长 
  10.     android:pivotX="50%" //下方介绍 
  11.     android:pivotY="50%"//下方介绍 
  12. ></rotate> 
  13. <scale 
  14.     android:fromXScale="1.0"//初始X坐标比率 
  15.     android:toXScale="0.1"//结束X坐标比率 
  16.     android:fromYScale="1.0"//初始Y坐标比率 
  17.     android:toYScale="0.1"//结束Y坐标比率 
  18.     android:pivotX="50%"//下方介绍 
  19.     android:pivotY="50%"//下方介绍 
  20.     android:duration="3000"//时长 
  21. ></scale> 
  22. <translate 
  23.     android:fromXDelta="0%"//下方介绍 
  24.     android:toXDelta="50%"//下方介绍 
  25.     android:fromYDelta="0%"//下方介绍 
  26.     android:toYDelta="100%"//下方介绍 
  27.     android:duration="3000"//时长 
  28. ></translate> 
我们在上面代码标注“下方介绍”的这些值,我们有三种写法,如: 50,50%,50%p。这三种写法就分别代表了ABSOLUTE,RELATIVE_TO_SELF和RELATIVE_TO_PARENT。
定义完 XML文件后,我们就要在Java代码中对其使用了。
举例,若将上面的 Alpha的XML文件命名为alpha.xml,则如此使用:
 
 
  1. class AlphaOnClickListener implements OnClickListener{ 
  2.        @Override 
  3.        public void onClick(View arg0) { 
  4.            // TODO Auto-generated method stub 
  5.  
  6.            Animation alphaAnimation = AnimationUtils.loadAnimation(AnimationDemo2Activity.this, R.anim.alpha);//载入alpha.xml 
  7.            item.startAnimation(alphaAnimation);//在ImageView上设置动画 
  8.        } 
  9.     } 
也可以将多个效果放在一个文件中的一个 set内,那么这几个动画会根据自己的设置一起运行,达到对同一个对象的多种效果的叠加效果。 

以上是Tweened Animations的两种基本用法,Animation的使用远远不止这些,需要进一步的学习哇。

附件是Tweened Animations的两种基本用法的示例代码,仅供参考。

本文出自 “战神殿” 博客,请务必保留此出处http://theron.blog.51cto.com/2383825/656385

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值