![v2-811002c6a896d37ac9b260b629dc4f47_1440w.jpg?source=172ae18b](http://img-02.proxy.5ce.com/view/image?&type=2&guid=00845a38-3830-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-811002c6a896d37ac9b260b629dc4f47_1440w.jpg?source=172ae18b)
- 插值器是在 XML 中定义的动画修改器,它会影响动画的变化率。插值器可对现有的动画效果执行加速、减速、重复、退回等。插值器通过 android:interpolator 属性应用于动画元素,该属性的值是对插值器资源的引用。
2. Android 中提供的所有插值器都是 Interpolator 类的子类。为便于您使用 android:interpolator 属性将插值器应用于动画,Android 针对每个插值器类包含了一个可供您引用的公共资源。
插值器类 | 资源 ID | 影响变化率方式 | 自定义名称和属性 |
---|---|---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 变化率在开始和结束时缓慢,但在中间会加快。 | accelerateDecelerateInterpolator 没有属性 |
AccelerateInterpolator | @android:anim/accelerate_interpolator | 变化率在开始时较为缓慢,然后会加快。 | accelerateInterpolator android:factor 浮点数。加速率(默认为 1) |
AnticipateInterpolator | @android:anim/anticipate_interpolator | 先反向变化,然后再急速正向变化。 | anticipateInterpolator android:tension 浮点数。要应用的张力(默认为 2)。 |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 先反向变化,再急速正向变化并超过目标值,然后以最终值结束。 | anticipateOvershootInterpolator android:tension 浮点数。要应用的张力(默认为 2)。 android:extraTension 浮点数。张力要乘以的倍数(默认值为 1.5)。 |
BounceInterpolator | @android:anim/bounce_interpolator | 变化会在结束时退回。 | bounceInterpolator 没有属性 |
CycleInterpolator | @android:anim/cycle_interpolator | 按指定的循环次数重复动画。变化率符合正弦曲线图。 | cycleInterpolator android:cycles 整数。循环次数(默认值为 1)。 |
DecelerateInterpolator | @android:anim/decelerate_interpolator | 变化率开始时很快,然后减慢。 | decelerateInterpolator android:factor 浮点数。减速率(默认值为 1)。 |
LinearInterpolator | @android:anim/linear_interpolator | 变化率恒定不变。 | linearInterpolator 没有属性 |
OvershootInterpolator | @android:anim/overshoot_interpolator | 先急速正向变化,再超过最终值,然后回到最终值。 | overshootInterpolator android:tension 浮点数。要应用的张力(默认为 2)。 |
3. 自定义插值器
如果您对平台提供的插值器(在上表中列出)不满意,则可以使用修改过的属性创建自定义插值器资源。例如,您可以调整 AnticipateInterpolator 的加速率或调整 CycleInterpolator 的循环次数。为此,您需要在 XML 文件中创建自己的插值器资源。这些自定义的XML文件需要放在res/anim文件夹中.
调用方式:
android:
例如:自定义的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">
</overshootInterpolator>
如果您不应用任何属性,或者应用的属性值和系统的默认属性值一样,则您的插值器的运作方式将与平台提供的插值器(在上表中列出)完全相同。如上面的文件中去掉android:tension="7.0"或者改成android:tension="2.0",则效果和下面的调用方式一样。
android:interpolator="@android:anim/overshoot_interpolator"