每日一学(八) Android动画---Tween动画的xml实现

这里主要记录一下Tween动画的原理及使用方法

一、原理

        关于android Tween动画的原理可参考这两篇博客: 

            android动画模块 Tween 动画的实现原理: http://www.android100.net/html/201304/23/2262.html

            Android动画原理:  http://blog.csdn.net/yelbosh/article/details/7750500 

二、xml中使用Tween动画及属性介绍

       2.1 Alpha

               

<?xml version="1.0" encoding="utf-8"?>

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="4000"
    android:fromAlpha="0"
    android:toAlpha="1.0" />
<!-- fromAlpha:动画开始时的透明度(取值范围为0.0到1.0)-->
<!-- toAlpha:动画结束时的透明度(取值范围为0.0到1.0)-->
<!-- 0.0表示完全透明,1.0表示完全不透明,Float值-->

       2.2 Scale

             

<?xml version="1.0" encoding="utf-8"?>

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="4000"
    android:fromXScale="0"
    android:fromYScale="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:startOffset="0"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:toXScale="1.0"
    android:toYScale="1.0" />
    <!--
     fromXDelta,fromYDelta    起始时X,Y座标,屏幕右下角的座标是X:320,Y:480
     toXDelta, toYDelta      动画结束时X,Y的座标
     interpolator             指定动画插入器  常见的有
                                     加速减速插入器           accelerate_decelerate_interpolator
                                     加速插入器               accelerate_interpolator,
                                     减速插入器               decelerate_interpolator。
      fromXScale,fromYScale, 动画开始前X,Y的缩放,0.0为不显示,  1.0为正常大小
      toXScale,toYScale,    动画最终缩放的倍数, 1.0为正常大小,大于1.0放大
      pivotX,  pivotY        动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从屏幕中间开始
      startOffset,           动画多次执行的间隔时间,如果只执行一次,执行前会暂停这段时间,
                                     单位毫秒 duration,一次动画效果消耗的时间,单位毫秒,
                                     值越小动画速度越快
      repeatCount,           动画重复的计数,动画将会执行该值+1次
      repeatMode,            动画重复的模式,reverse为反向,当第偶次执行时,动画方向会相反。
      restart                 为重新执行,方向不变 -->
          2.3  Translate
               
<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="4000"
    android:fromXDelta="0"
    android:toXDelta="500"
    android:fromYDelta="0"
    android:toYDelta="500"/>
    <!--    
    fromXDelta,fromYDelta   起始时X,Y座标    
    toXDelta, toYDelta     动画结束时X,Y的座标 -->   
          2.4   Rotate
<?xml version="1.0" encoding="utf-8"?>

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="4000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" />
    <!--
      fromDegrees   动画开始时的角度
      toDegrees     动画结束时物件的旋转角度,正代表顺时针
      pivotX    属性为动画相对于物件的X坐标的开始位置  
      pivotY    属性为动画相对于物件的Y坐标的开始位置    -->

       在xml中定义好各种效果后,我们需要在代码中引用一下上面的效果,只需要简单的两行代码就行了:

           

     Animation animation= AnimationUtils.loadAnimation(this,R.anim.animation_rotate);
     你的View.startAnimation(animation);

   tips:

        xml文件位于 res/anim 文件下

     单个的效果往往过于单调,我们也可以在xml中用<set>标签将上面的动画效果组合起来:

       

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <alpha
        android:duration="4000"
        android:fromAlpha="0"
        android:toAlpha="1.0" />
    <rotate 
        android:duration="4000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />
</set>
     其中set的属性有:

       

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为 true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为 true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与 android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有 reverse 和 restart 两个值,reverse 表示倒序回放,restart 表示重新放一遍,必须与 repeatCount 一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,后面会单独列出一单讲解。

 三、interpolator插值器

     首先来看下官网给出的interpolator的定义:interpolaotor定义了动画变化的速率,它允许基础动画(alpha, scale, translate, rotate)加速,减速,重复变化等等。在补间动画中,我们一般只定义关键帧(首帧和尾帧),然后由系统自动生成中间帧,生成中间帧的这个过程可以成为“插值”。插值器定义了动画变化的速率,提供不同的函数定义变化值相对于时间的变化规则,可以定义各种各样的非线性变化函数,比如加速、减速等。下面是几种常见的插值器:

Interpolator对象资源ID功能作用
AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator先加速再减速
AccelerateInterpolator@android:anim/accelerate_interpolator加速
AnticipateInterpolator@android:anim/anticipate_interpolator先回退一小步然后加速前进
AnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolator先回退一小步然后加速前进,超出终点一小步后再回到终点
BounceInterpolator@android:anim/bounce_interpolator最后阶段弹球效果
CycleInterpolator@android:anim/cycle_interpolator周期运动
DecelerateInterpolator@android:anim/decelerate_interpolator减速
LinearInterpolator@android:anim/linear_interpolator匀速
OvershootInterpolator@android:anim/overshoot_interpolator快速到达终点并超出一小步最后回到终点

 怎么用它呢?它的用法也非常简单只需要在xml文件中加一句话就行了

        android:interpolator="@android:anim/bounce_interpolator"  

   如果只简单地引用这些插值器还不能满足需要的话,我们要考虑一下个性化插值器。我们可以创建一个插值器资源修改插值器的属性,比如修改AnticipateInterpolator的加速速率,调整CycleInterpolator的循环次数等。为了完成这种需求,我们需要创建XML资源文件,然后将其放于/res/anim下,然后再动画元素中引用即可。我们先来看一下几种常见的插值器可调整的属性:


<accelerateDecelerateInterpolator>             无
<accelerateInterpolator>                              android:factor 浮点值,加速速率,默认为1
<anticipateInterploator>                               android:tension 浮点值,起始点后退的张力、拉力数,默认为2
<anticipateOvershootInterpolator>               android:tension 同上 android:extraTension 浮点值,拉力的倍数,默认为1.5(2  * 1.5)
<bounceInterpolator>                                   无
<cycleInterplolator>                                       android:cycles 整数值,循环的个数,默认为1
<decelerateInterpolator>                               android:factor 浮点值,减速的速率,默认为1
<linearInterpolator>                                       无
<overshootInterpolator>                                浮点值,超出终点后的张力、拉力,默认为2

          

    如果需要自定义插值器的话,只需要在res/anim 下创建xml资源文件,修改对应的属性,引用即可。

     源码: http://download.csdn.net/detail/u010838555/9874789

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值