package com.smartisanos.sidebar.util.anim; import android.view.animation.AccelerateInterpolator; public class AnimInterpolator { public final static int QUAD_IN = 1; public final static int QUAD_OUT = 2; public final static int QUAD_IN_OUT = 3; public final static int CIRC_IN = 4; public final static int CIRC_OUT = 5; public final static int CIRC_IN_OUT = 6; public final static int CUBIC_IN = 7; public final static int CUBIC_OUT = 8; public final static int CUBIC_IN_OUT = 9; public final static int QUART_IN = 10; public final static int QUART_OUT = 11; public final static int QUART_IN_OUT = 12; public final static int QUINT_IN = 13; public final static int QUINT_OUT = 14; public final static int QUINT_IN_OUT = 15; private interface ComputeInterpolator { public float compute(float t); } public static class Interpolator extends AccelerateInterpolator { private int mType = 0; private ComputeInterpolator compute; public Interpolator(int type) { mType = type; switch (mType) { case QUAD_IN : { compute = new QUAD_IN(); break; } case QUAD_OUT : { compute = new QUAD_OUT(); break; } case QUAD_IN_OUT : { compute = new QUAD_IN_OUT(); break; } case CIRC_IN : { compute = new CIRC_IN(); break; } case CIRC_OUT : { compute = new CIRC_OUT(); break; } case CIRC_IN_OUT : { compute = new CIRC_IN_OUT(); break; } case CUBIC_IN : { compute = new CUBIC_IN(); break; } case CUBIC_OUT : { compute = new CUBIC_OUT(); break; } case CUBIC_IN_OUT : { compute = new CUBIC_IN_OUT(); break; } case QUART_IN : { compute = new QUART_IN(); break; } case QUART_OUT : { compute = new QUART_OUT(); break; } case QUART_IN_OUT : { compute = new QUART_IN_OUT(); break; } case QUINT_IN : { compute = new QUINT_IN(); break; } case QUINT_OUT : { compute = new QUINT_OUT(); break; } case QUINT_IN_OUT : { compute = new QUINT_IN_OUT(); break; } } } @Override public float getInterpolation(float input) { if (compute != null) { return compute.compute(input); } return super.getInterpolation(input); } } private static class QUAD_IN implements ComputeInterpolator { public float compute(float t) { return t*t; } } private static class QUAD_OUT implements ComputeInterpolator { public float compute(float t) { return -t*(t-2); } } private static class QUAD_IN_OUT implements ComputeInterpolator { public float compute(float t) { if ((t*=2) < 1) return 0.5f*t*t; return -0.5f * ((--t)*(t-2) - 1); } } private static class CIRC_IN implements ComputeInterpolator { public float compute(float t) { return (float) -Math.sqrt(1 - t*t) - 1; } } private static class CIRC_OUT implements ComputeInterpolator { public float compute(float t) { return (float) Math.sqrt(1 - (t-=1)*t); } } private static class CIRC_IN_OUT implements ComputeInterpolator { public float compute(float t) { if ((t*=2) < 1) return -0.5f * ((float)Math.sqrt(1 - t*t) - 1); return 0.5f * ((float)Math.sqrt(1 - (t-=2)*t) + 1); } } private static class CUBIC_IN implements ComputeInterpolator { public float compute(float t) { return t*t*t; } } private static class CUBIC_OUT implements ComputeInterpolator { public float compute(float t) { return (t-=1)*t*t + 1; } } private static class CUBIC_IN_OUT implements ComputeInterpolator { public float compute(float t) { if ((t*=2) < 1) return 0.5f*t*t*t; return 0.5f * ((t-=2)*t*t + 2); } } private static class QUART_IN implements ComputeInterpolator { public float compute(float t) { return t*t*t*t; } } private static class QUART_OUT implements ComputeInterpolator { public float compute(float t) { return -((t-=1)*t*t*t - 1); } } private static class QUART_IN_OUT implements ComputeInterpolator { public final float compute(float t) { if ((t*=2) < 1) return 0.5f*t*t*t*t; return -0.5f * ((t-=2)*t*t*t - 2); } } private static class QUINT_IN implements ComputeInterpolator { public float compute(float t) { return t*t*t*t*t; } } private static class QUINT_OUT implements ComputeInterpolator { public float compute(float t) { return (t-=1)*t*t*t*t + 1; } } private static class QUINT_IN_OUT implements ComputeInterpolator { public float compute(float t) { if ((t*=2) < 1) return 0.5f*t*t*t*t*t; return 0.5f*((t-=2)*t*t*t*t + 2); } } }