Android之Animation全介绍

来源:互联网 发布:帝国整站源码 编辑:程序博客网 时间:2024/06/05 10:56

转自http://blog.csdn.net/fengkuanghun/article/details/7892921

1.Animation简介


1.1.简介  

      Animation为Android提供了一系列的动画效果:旋转、缩放、移动、淡入淡出,这些动画效果可以应用于绝大多数控件。

1.2.分类

      Animation可分为两类:

      TweenedAnimations:渐变动画,具体就是旋转、缩放、移动、淡入淡出效果。

      Frame-by-FrameAnimations:将一系列Drawable序列一次播放,类似于电影模式,常用来进行定时更新背景等操作。

1.3.实现方法

      Animation有两种实现方法:

      在xml文件中实现,优点是复用性好,可维护性好,多个控件可以使用同一个xml文件。缺点是由于xml文件不进行编译,所以排错比较难。

      在代码中实现,优点是排错很方便,缺点是重复代码多,可复用性低。



2.TweenedAnimations

2.1.效果

      Alpha:淡入淡出

      Scale:缩放

      Rotate:旋转

      Translate:移动

2.2.实现

2.2.1.在代码中实现

(1)创建AnimationSet对象(可以柔和多个动画效果)

      AnimationSet是Animation的子类,一个AnimationSet包含了一系列的Animation,对AnimationSet属性的设置将会应用于其中的每一个Animation。

[java] view plaincopy
  1. AnimationSet animationSet=new AnimationSet(true);  

     

(2)根据需要创建相应的Animation对象(根据4种效果有4个子类)

      淡入淡出: 

[java] view plaincopy
  1. AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);    //两个参数分别表示初始透明度和目标透明度,                                                                                          //1表示不透明,0表示完全透明。  

      旋转:

[java] view plaincopy
  1. RotateAnimation rotateAnimation=new RotateAnimation(0,360,Animation.RELATIVE_TO_PARENT,1f,Animation.RELATIVE_TO_PARENT,1f);  

参数含义:

参数1:初始角度,0表示图片当前位置。

参数2:目标角度。

参数3、4、5、6定义了旋转的圆心

参数3:X坐标的类型,有三种默认值:RELATIVE_TO_PARENT 相对于父控件

                                                            RELATIVE_TO_SELF 相对于符自己

                                                            RELATIVE_TO_ABSOLUTE 绝对坐标

参数4:X轴偏移比例,变化范围是0f—1f

参数5:Y坐标的类型,同样也有三种默认值

参数6:Y轴偏移比例,变化范围是0f—1f

      缩放:

[java] view plaincopy
  1. ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.1f,1,0.1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);  

参数含义:

参数1,2:X轴缩放比例—从1缩放到0.1

参数3,4:Y轴缩放比例—从1缩放到0.1

参数5,6:X轴轴心点(类型和比例)

参数7,8:Y轴轴心点(类型和比例)

      移动:

[java] view plaincopy
  1. TranslateAnimation translateAnimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0.5f);  

参数含义:

参数1,2:X轴的开始位置

参数3,4:X轴的结束位置

参数5,6:Y轴的开始位置

参数7,8:Y轴的结束位置


(3)为Animation配置数据

      这里说明一下TweenedAnimations的几个通用属性

[java] view plaincopy
  1. .setDuration(long durationMills);  //动画执行的时间,单位是毫秒。  
  2. .setFillAfter(boolean fillAfter);  //设为true,则动画完成后停留在结束状态  
  3. .setFillBefore(boolean fillBefore);  //设为true,则动画完成后停留在初始状态  
  4. .setStartOffset(long startOffset);  //动画执行前的等待时间  
  5. .setRepeatCount(int repeatCount);  //动画执行重复的次数  

(4)将Animation对象加入AnimationSet中

[java] view plaincopy
  1. animationSet.addAnimation(alphaAnimation);  

(5)使用控件对象开始执行AnimationSet

[java] view plaincopy
  1. ***.StartAnimation(animationSet);  

2.2.2.在xml中实现

(1)在res目录下新建anim文件夹

(2)在anim中创建xml文件,并首先加入set标签:

[html] view plaincopy
  1. <set xmlns:android=“http://schemas.android.com/apk/res/android”  
  2.                   android:interpolator="@android:anim/accelerate_interpolator">  
  3. </set>  

(3)在set标签中可加入rotate、alpha、scale或translate等标签。例:

[html] view plaincopy
  1. <rotate  
  2.            android:fromDegrees="0"       //起始角度  
  3.            android:toDegrees="360"      //目的角度,这里的角度可以写负数,这时会逆时针旋转  
  4.            android:pivotX="%50"            //X轴的旋转圆心,50,则对应RELATIVE_TO_ABSOLUTE ,50%,则对  
  5.                                                          //应 RELATIVE_TO_SELF ,50%p,则对应RELATIVE_TO_PARENT 。  
  6.            android:pivotY="%50"           //Y轴的旋转圆心  
  7.  >  

      这些标签的具体使用可以查阅Android帮助文档。

(4)在代码中使用AnimationUtils装载xml,并生成Animation对象。

[java] view plaincopy
  1. Animation animation=AnimationUtils.loadAnimation(MainActivity.this,R.anim.***);    //装载指定的xml文件  


2.3.关于Interpolator

2.3.1.简介

      Interpolator定义了动画的速率,几种默认的Interpolator如下:

      AccelerateInterpolator:动画开始时比较慢,然后逐渐加速。

      DecelerateInterpolator:动画开始时比较快,然后逐渐减速。

      AccelerateDecelerateInterpolator:动画开始时和结束时比较慢,中间过程加速。

      LinearInterpolator:动画匀速进行。

      CycleInterpolator:动画循环播放指定次数,速率沿着正弦曲线改变。

2.3.2.实现

定义在代码中:

[java] view plaincopy
  1. AnimationSet  animationSet =new AnimationSet (true);      //这里设置为true,则为animationSet 设置的Interpol                                                                                    //应用于animationSet 中的所有animation对象。   
  2. animationSet .setInterpolator(new AccelerateInterpolator);//为animationSet 设置Interpolator。  

或者:

[java] view plaincopy
  1. AnimationSet  animationSet =new AnimationSet (false);        
  2.       animation1 .setInterpolator(new AccelerateInterpolator);  
  3.       animation2.setInterpolator(new AccelerateInterpolator);  
  4.       ......          //为每一个animation对象设置Interpolator。  

定义在xml中:

在set标签中添加属性,

[html] view plaincopy
  1. android:shareInterpolator="true"      //设置为true,则这时设置的Interpolator适用于标签中的所有动画。  
  2. android:interpolator="@android:anim/accelerate_interpolator”   //为set设置Interpolator。  

或者:

[html] view plaincopy
  1. android:shareInterpolator="false"     //设置为false,则需为每一个动画添加interpolator属性。  


3.Frame-By-FrameAnimations

3.1.实现

(1)在drawable文件夹下创建xml文件:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.      <animation-list xmlms:android="http://schemas.android.com/apk/res/android"  
  3.                                       android:onshot="false">  
  4.      <item android:drawable=""@drawable/pic1 android:duration="500" />  
  5.      <item android:drawable=""@drawable/pic2 android:duration="500" />  
  6.      <item android:drawable=""@drawable/pic3 android:duration="500" />  
  7.    </animation-list>  

这个文件就定义了需要一次播放的图片资源,每一个<item>就是一个资源,drawable属性就是资源图片,duration指的是播放的时长。

(2) 代码中添加:

[java] view plaincopy
  1. imageView.setBackgroundResource(R.drawable.***);  //将创建的的xml装载进imageView  
  2. AnimationDrawable animationDrawable=(AnimationDrawable)imageView.getBackground();  
  3. animationDrawable.start();    //启动动画  



4.LayoutAnimaionController

4.1.简介

      LayoutAnimaionController为Layout或者viewGroup里的控件设置动画效果,特点是它会使其中的每个控件都有相同的动画效果,这些控件的动画效果可以在不同的时间显示出来。

4.2.实现(结合ListView使用)

      LayoutAnimaionController同样即可以在代码中设置,也可以在xml中设置。

在代码中:

(1)创建Animation对象,使用构造函数或者装载xml都可以。

(2)创建LayoutAnimaionController对象

[java] view plaincopy
  1. LayoutAnimaionController lac=new LayoutAnimaionController(animation);  

(3)设置属性

[java] view plaincopy
  1. lac.setOrder(LayoutAnimaionController .ORDER_NORMAL);//设置顺序  

      有三种默认顺序:

            LayoutAnimaionController .ORDER_NORMAL       // 顺序

            LayoutAnimaionController .ORDER_REVERSE     //反序

            LayoutAnimaionController .ORDER_RANDOM      //随机

[java] view plaincopy
  1. lac.setDelay(***f);//设置执行动画的延迟时间,即时间间隔,单位是秒  

(4)为ListView设置

[java] view plaincopy
  1. listView.setLayoutAnimation(lac);  

在xml文件中:

(1)在res/anim文件夹中创建xml文件

[html] view plaincopy
  1. <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android“  
  2.                        android:delay="0.5"                                 //执行动画的延迟时间,即时间间隔,单位是秒  
  3.                        android:animationOrder="random"/"normal"/"reverse"  //执行顺序  
  4.                        android:animation="@anim/***"                       //这是装载具体动画的xml文件  

(2)在具体的布局文件中配置属性     

[html] view plaincopy
  1. android:layoutAnimation="@anim/***" <span style="font-family: tahoma, helvetica, arial;"> </span>  



5.AnimationListener

5.1.简介

      AnimationListener是一个监听器,它在动画执行的各个阶段会得到通知,并且调用相应的方法

5.2.方法

(1)onAnimationStart(Animation animation)    在动画开始的时候调用

(2)onAnimationEnd(Animation animation)     在动画结束的时候调用

(3)onAnimationRepeate(Animation animation)    在动画重复的时候调用

5.3.实现

(1)构造监听器

[java] view plaincopy
  1. private class MyAnimationListener implements AnimationListener{  
  2.                  ......在其中覆写三种方法  
  3.   }  

(2)使用

[java] view plaincopy
  1. animation.setAnimationListener(new MyAnimationListener());  
0 0
原创粉丝点击