首页 > 代码库 > Android 动画

Android 动画

本文引自:http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html ,略有增删

  1. Animations:可以实现Android UI的动画效果,可以分为两大类:
    • Tween Animation:一种渐变动画,通过对UI图像不断做变换(平移,缩放,旋转,透明度变化)产生动画效果
    • Frame Animation:图像切换动画,按照指定的时间间隔顺序播放事先做好的图像
  2. Tween Animation常用的类包括:
    • Animation:抽象基类
    • AlphaAnimation:渐变透明度
    • RotationAnimation:旋转
    • ScaleAnimation:渐变尺寸缩放
    • AnimationSet:动画集合,对UI同时使用多种动画时使用
  3. 使用Tween Animation的步骤如下:
    • 创建AnimationiSet对象
    • 创建Animation对象,可以多个,添加到AnimationSet中
    • 使用控件对象开始执行AnimationSet
  4. Interpolator:定义了动画变化的速率,Animations框架中定义了如下几种Interpolator:
    • AccelerateDecelerateIntepolator:动画开始和结束的地方速率改变较慢,中间较快
    • AccelerateInterpolator:动画加速改变
    • CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦权限
    • DecelerateInterpolator:动画减速改变
    • LinearInterpolator:动画匀速改变
  5. 使用Xml定义Tween Animation:动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以是同时的。加载xml中定义的动画使用AnimationUtils类的loadAnimation方法
    //main.xml中的ImageViewImageView image = (ImageView) findViewById(R.id.image);//加载动画Animation animation =AnimationUtils.loadAnimation(this, R.anim.rotationAnimation);//显示动画image.startAnimation(animation);

    Tween Animation共同的节点属性

    属性[类型]功能备注
    Duration[long]属性为动画持续时间时间以毫秒为单位
    fillAfter [boolean]当设置为true ,该动画转化在动画结束后被应用
    fillBefore[boolean]当设置为true ,该动画转化在动画开始前被应用

    interpolator

    指定一个动画的插入器有一些常见的插入器
    accelerate_decelerate_interpolator
    加速-减速 动画插入器
    accelerate_interpolator
    加速-动画插入器
    decelerate_interpolator
    减速- 动画插入器
    其他的属于特定的动画效果
    repeatCount[int]动画的重复次数
    RepeatMode[int]定义重复的行为1:重新开始  2:plays backward
    startOffset[long]动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
    zAdjustment[int]定义动画的Z Order的改变0:保持Z Order不变
    1:保持在最上层
    -1:保持在最下层

    表二

    XML节点功能说明
    alpha渐变透明度动画效果
    <alpha
    android:fromAlpha=”0.1″
    android:toAlpha=”1.0″
    android:duration=”3000″ />
    fromAlpha

    属性为动画起始时透明度

    0.0表示完全透明
    1.0表示完全不透明
    以上值取0.0-1.0之间的float数据类型的数字

    duration为动画持续时间,ms单位

    toAlpha

    属性为动画结束时透明度

    表三

    scale渐变尺寸伸缩动画效果
    <scale
    android:interpolator= “@android:anim/accelerate_decelerate_interpolator”
    android:fromXScale=”0.0″
    android:toXScale=”1.4″
    android:fromYScale=”0.0″
    android:toYScale=”1.4″
    android:pivotX=”50%”
    android:pivotY=”50%”
    android:fillAfter=”false”
    android:startOffset=“700”
    android:duration=”700″
    android:repeatCount=”10″ />
    fromXScale[float] fromYScale[float]为动画起始时,X、Y坐标上的伸缩尺寸0.0表示收缩到没有
    1.0表示正常无伸缩
    值小于1.0表示收缩
    值大于1.0表示放大
    toXScale [float]
    toYScale[float]
    为动画结束时,X、Y坐标上的伸缩尺寸
    pivotX[float]
    pivotY[float]
    为动画相对于物件的X、Y坐标的开始位置属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置

    表四

    translate画面转换位置移动动画效果
    <translate
    android:fromXDelta=”30″
    android:toXDelta=”-80″
    android:fromYDelta=”30″
    android:toYDelta=”300″
    android:duration=”2000″ />
    fromXDelta
    toXDelta
    为动画、结束起始时 X坐标上的位置
    fromYDelta
    toYDelta
    为动画、结束起始时 Y坐标上的位置

    表五

    rotate画面转移旋转动画效果
    <rotate
    android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
    android:fromDegrees=”0″
    android:toDegrees=”+350″
    android:pivotX=”50%”
    android:pivotY=”50%”
    android:duration=”3000″ />
    fromDegrees为动画起始时物件的角度说明
    当角度为负数——表示逆时针旋转
    当角度为正数——表示顺时针旋转
    (负数from——to正数:顺时针旋转)
    (负数from——to负数:逆时针旋转)
    (正数from——to正数:顺时针旋转)
    (正数from——to负数:逆时针旋转)
    toDegrees属性为动画结束时物件旋转的角度 可以大于360度
    pivotX
    pivotY
    为动画相对于物件的X、Y坐标的开始位说明:以上两个属性值 从0%-100%中取值
    表示使用相对于控件本身定位,当值为”50”表示绝对位置定位,当值为”50%p”表示相对于父控件定位

  6. Frame animation:可以在XML Resource定义(还是存放到res\anim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画,当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:
  7. XML属性说明
    drawable当前帧引用的drawable资源
    duration当前帧显示的时间(毫秒为单位)
    oneshot如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
    variablePaddingIf true, allows the drawable’s padding to change based on the current state that is selected.
    visible规定drawable的初始可见性,默认为flase;
    下面给个具体的xml例子,来定义一帧一帧的动画
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"    android:oneshot="true">    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /></animation-list>

  8. AnimationListener:一个监听器,在动画执行的各个阶段会得到通知,从而调用相应的方法,AnimationListener的方法包括:
    • onAnimatioinEnd(Animation animation):动画结束时调用
    • onAnimationRepeat(Animation animation):动画重复时调用
    • onAnimationStart(Animation animation):动画开始时调用

Android 动画