首页 » 漏洞 » Interpolator插值器

Interpolator插值器

 

开始

根据官方文档的描述:

An interpolator defines the rate of change of an animation. This allows the basic animation effects (alpha, scale, translate, rotate) to be accelerated, decelerated, repeated, etc.

一个插值器定义了动画改变的速率,它允许影响基本动画的加速、减速和重复等。

因此插值器是用来控制动画执行速率的工具,Android系统给我们提供了许多内置的插值器,一般情况下我们使用系统提供的就够了。

系统内置Interpolator

  • AccelerateDecelerateInterpolator
    在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
  • AccelerateInterpolator
    在动画开始的地方速率改变比较慢,然后开始加速
  • AnticipateInterpolator
    开始的时候向后然后向前甩
  • AnticipateOvershootInterpolator
    开始的时候向后然后向前甩一定值后返回最后的值
  • BounceInterpolator
    动画结束的时候弹起
  • CycleInterpolator
    动画循环播放特定的次数,速率改变沿着正弦曲线
  • DecelerateInterpolator
    在动画开始的地方快然后慢
  • LinearInterpolator
    以常量速率改变
  • OvershootInterpolator
    向前甩一定值后再回到原来位置
  • .............etc.

使用方法

  • XML 通过@android:anim/xx_interpolator引用。
<?xml version="1.0" encoding="utf-8"?>   <scale xmlns:android="http://schemas.android.com/apk/res/android"       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:duration="700"        android:fillAfter="true"   />
  • 代码
mScaleAnim.setInterpolator(new BounceInterpolator());

默认插值器

默认情况下,每个Animation或Animator都有一个默认的插值器,它就是AccelerateDecelerateInterpolator。

从代码里可以看出

Animation.java

/**      * Gurantees that this animation has an interpolator. Will use      * a AccelerateDecelerateInterpolator is nothing else was specified.      */     protected void ensureInterpolator() {         if (mInterpolator == null) {             mInterpolator = new AccelerateDecelerateInterpolator();         }     }

ValueAnnimator.java

private static final TimeInterpolator sDefaultInterpolator =               new AccelerateDecelerateInterpolator();

自定义插值器

自定义Interpolator只需要继承Interpolator类,并重写 float getInterpolation (float input);这里我们可以使用数学函数定义各种效果了。

/**  * 自定义正弦插值器  * Created by Administrator on 2017/4/19.  */ public class SinInterpolator implements Interpolator {      @Override     public float getInterpolation(float input) {         return (float) Math.sin((input / 2) * Math.PI);     } }

结束

Interpolator的基本用法就这些,一般情况下,系统提供的插值器够我们日常开发使用了,我们可以通过它们实现各种酷炫的效果。

Deomo 地址: gitHub

参考 Android开发文档-Interpolator

原文链接:Interpolator插值器,转载请注明来源!

0