• 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中的ImageView
      ImageView 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定义(还是存放到resanim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画,当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:
    7. XML属性 说明
      drawable 当前帧引用的drawable资源
      duration 当前帧显示的时间(毫秒为单位)
      oneshot 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
      variablePadding If 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):动画开始时调用
  • 相关阅读:
    图灵科普系列丛书封面有奖征集(贴图送书)
    图灵2010.03书讯
    博客园图灵杯第4届博问大赛(2.27~3.27)
    asp.net运行原理
    IIS与NET桥梁
    offsetParent解释
    XML 操作类库(开源项目)
    W3C不兼容问题(最根本的原因,及解决方案)
    深入理解JavaScript系列
    HttpApplication对象创建的细节
  • 原文地址:https://www.cnblogs.com/phenixyu/p/4225488.html
Copyright © 2020-2023  润新知