package com.cusnews.widgets; import android.view.animation.Interpolator; /** * Created by yugy on 14/11/21. * <p/> * Support material-design feeling. * <p/> * <a href="https://github.com/kyze8439690/RevealLayout">RevealLayout</a> */ class BakedBezierInterpolator implements Interpolator { /** * Lookup table values. Generated using a Bezier curve from (0,0) to (1,1) with control points: P0 (0,0) P1 (0.4, 0) P2 (0.2, 1.0) P3 (1.0, 1.0) * <p/> * Values sampled with x at regular intervals between 0 and 1. */ private static final float[] VALUES = new float[] { 0.0f , 0.0002f , 0.0009f , 0.0019f , 0.0036f , 0.0059f , 0.0086f , 0.0119f , 0.0157f , 0.0209f , 0.0257f , 0.0321f , 0.0392f , 0.0469f , 0.0566f , 0.0656f , 0.0768f , 0.0887f , 0.1033f , 0.1186f , 0.1349f , 0.1519f , 0.1696f , 0.1928f , 0.2121f , 0.237f , 0.2627f , 0.2892f , 0.3109f , 0.3386f , 0.3667f , 0.3952f , 0.4241f , 0.4474f , 0.4766f , 0.5f , 0.5234f , 0.5468f , 0.5701f , 0.5933f , 0.6134f , 0.6333f , 0.6531f , 0.6698f , 0.6891f , 0.7054f , 0.7214f , 0.7346f , 0.7502f , 0.763f , 0.7756f , 0.7879f , 0.8f , 0.8107f , 0.8212f , 0.8326f , 0.8415f , 0.8503f , 0.8588f , 0.8672f , 0.8754f , 0.8833f , 0.8911f , 0.8977f , 0.9041f , 0.9113f , 0.9165f , 0.9232f , 0.9281f , 0.9328f , 0.9382f , 0.9434f , 0.9476f , 0.9518f , 0.9557f , 0.9596f , 0.9632f , 0.9662f , 0.9695f , 0.9722f , 0.9753f , 0.9777f , 0.9805f , 0.9826f , 0.9847f , 0.9866f , 0.9884f , 0.9901f , 0.9917f , 0.9931f , 0.9944f , 0.9955f , 0.9964f , 0.9973f , 0.9981f , 0.9986f , 0.9992f , 0.9995f , 0.9998f , 1.0f , 1.0f }; private static final float STEP_SIZE = 1.0f / ( VALUES.length - 1 ); @Override public float getInterpolation( float input ) { if( input >= 1.0f ) { return 1.0f; } if( input <= 0f ) { return 0f; } int position = Math.min( (int) ( input * ( VALUES.length - 1 ) ), VALUES.length - 2 ); float quantized = position * STEP_SIZE; float difference = input - quantized; float weight = difference / STEP_SIZE; return VALUES[ position ] + weight * ( VALUES[ position + 1 ] - VALUES[ position ] ); } }