package com.marshalchen.common.uimodule.flipViews.flipview;
import android.graphics.Canvas;
public class RubberBandOverFlipper implements OverFlipper {
private static final float MAX_OVER_FLIP_DISTANCE = 70;
private static final float EXPONENTIAL_DECREES = 0.85f;
private float mTotalOverFlip;
private float mCurrentOverFlip;
@Override
public float calculate(float flipDistance, float minFlipDistance,
float maxFlipDistance) {
float deltaOverFlip;
if(flipDistance<minFlipDistance) {
deltaOverFlip = flipDistance - minFlipDistance - mCurrentOverFlip;
}else {
deltaOverFlip = flipDistance - maxFlipDistance - mCurrentOverFlip;
}
mTotalOverFlip += deltaOverFlip;
float sign = Math.signum(mTotalOverFlip);
mCurrentOverFlip = (float) Math.pow(Math.abs(mTotalOverFlip), EXPONENTIAL_DECREES) * sign;
if(mCurrentOverFlip < 0) {
mCurrentOverFlip = Math.max(-MAX_OVER_FLIP_DISTANCE, mCurrentOverFlip);
}else {
mCurrentOverFlip = Math.min(MAX_OVER_FLIP_DISTANCE, mCurrentOverFlip);
}
return mCurrentOverFlip + (mCurrentOverFlip < 0 ? minFlipDistance : maxFlipDistance);
}
@Override
public boolean draw(Canvas c) {
return false;
}
@Override
public void overFlipEnded() {
mTotalOverFlip = 0;
mCurrentOverFlip = 0;
}
@Override
public float getTotalOverFlip() {
return mTotalOverFlip;
}
}