AndroidアニメーションのInterpolator


Androidソースには、Interpolatorが2つあります.一つはframeworks/base/graphics/java/android/graphics/Interpolator.javaです.もう1つはframeworks/base/core/java/android/view/animation/interpolator.javaです.今日お話ししたいのは後者です.
frameworks/base/core/java/android/view/animation/interpolator.javaのソースコードは次のとおりです.
/**
 * 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.
 */
public interface Interpolator extends TimeInterpolator {
    // A new interface, TimeInterpolator, was introduced for the new android.animation
    // package. This older Interpolator interface extends TimeInterpolator so that users of
    // the new Animator-based animations can use either the old Interpolator implementations or
    // new classes that implement TimeInterpolator directly.
}

Androidは3.0で属性アニメーションを導入する際、TimeInterpolatorインタフェースを追加した.Interpolatorはそれに対応する古いインタフェースになります.InterpolatorはTimeInterpolatorを継承し、古いコードと互換性があります.開発者は,新しいコードを開発する際に,TimeInterpolatorインタフェースを直接実現することを提案する.だから、TimeInterpolatorのソースコードをもう一度見なければなりません.
frameworks/base/core/java/android/animation/timeInterpolator.javaのソースコードは次のとおりです.
/**
 * A time interpolator defines the rate of change of an animation. This allows animations
 * to have non-linear motion, such as acceleration and deceleration.
 */
public interface TimeInterpolator {

    /**
     * Maps a value representing the elapsed fraction of an animation to a value that represents
     * the interpolated fraction. This interpolated value is then multiplied by the change in
     * value of an animation to derive the animated value at the current elapsed animation time.
     *
     * @param input A value between 0 and 1.0 indicating our current point
     *        in the animation where 0 represents the start and 1.0 represents
     *        the end
     * @return The interpolation value. This value can be more than 1.0 for
     *         interpolators which overshoot their targets, or less than 0 for
     *         interpolators that undershoot their targets.
     */
    float getInterpolation(float input);
}

TimeInterpolatorは、アニメーションが変化するインタフェースを定義します.float getInterpolation(float input)の入力は[0,1.0]であり、アニメーション補間器の正規化時間であり、0は開始、1.0は終了を表す.戻り値は、アニメーション補間器の正規化結果[0,1.0]であるが、戻り値がターゲット(overshoot their targets)を超えた場合には<0または>1.0であってもよい.