16c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohenpackage com.android.launcher3; 26c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen 36c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohenimport android.animation.TimeInterpolator; 46c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen 56c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohenpublic class LogAccelerateInterpolator implements TimeInterpolator { 66c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen 76c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen int mBase; 86c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen int mDrift; 96c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen final float mLogScale; 106c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen 116c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen public LogAccelerateInterpolator(int base, int drift) { 126c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen mBase = base; 136c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen mDrift = drift; 146c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen mLogScale = 1f / computeLog(1, mBase, mDrift); 156c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen } 166c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen 176c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen static float computeLog(float t, int base, int drift) { 186c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen return (float) -Math.pow(base, -t) + 1 + (drift * t); 196c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen } 206c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen 216c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen @Override 226c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen public float getInterpolation(float t) { 23bd42ba73b23d0470b675af73a721fc1d019be39dTony Wickham // Due to rounding issues, the interpolation doesn't quite reach 1 even though it should. 24bd42ba73b23d0470b675af73a721fc1d019be39dTony Wickham // To account for this, we short-circuit to return 1 if the input is 1. 25bd42ba73b23d0470b675af73a721fc1d019be39dTony Wickham return Float.compare(t, 1f) == 0 ? 1f : 1 - computeLog(1 - t, mBase, mDrift) * mLogScale; 266c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen } 276c5891a9fce95eee3d87823d11d21889743e9c68Adam Cohen} 28