插值器android
首先要了解为何须要插值器,由于在补间动画中,咱们通常只定义关键帧(首帧或尾帧),而后由系统自动生成中间帧,生成中间帧的这个过程能够成为“插值”。插值器定义了动画变化的速率,提供不一样的函数定义变化值相对于时间的变化规则,能够定义各类各样的非线性变化函数,好比加速、减速等。下面是几种常见的插值器:函数
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 | 快速到达终点并超出一小步最后回到终点 |
插值器使用法:优化
<set android:interpolator="@android :anim/accelerate_interpolator">
...
</set>动画
个性化插值器:spa
若是系统提供的插值器不能知足须要,能够经过修改插值器的属性优化,好比修改AnticipateInterpolator的加速速率,调整CycleInterpolator的循环次数等。.net
常见的插值器可调整的属性:orm
<accelerateDecelerateInterpolator> 无xml
<accelerateInterpolator> android:factor 浮点值,加速速率,默认为1对象
<anticipateInterploator> android:tension 浮点值,起始点后退的张力、拉力数,默认为2ip
<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文件(以修改overshootInterpolator属性为例)命名为my_overshoot_interpolator.xml
<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"/>
引用到自定义的插值器
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/my_overshoot_interpolator"
.../>
自定义插值器
若是以上的修改系统插值器属性仍没法知足须要,能够自定义插值器。