package com.blundell.quicksand.viscosity;
/**
* Speeds up over time until 0 duration
*/
public class LinearChangeViscosityInterpolator implements ViscosityInterpolator {
private static final int DEFAULT_MAX_VIEWS = 10;
private final int maxViews;
public static ViscosityInterpolator defaultInstance() {
return new LinearChangeViscosityInterpolator(DEFAULT_MAX_VIEWS);
}
public LinearChangeViscosityInterpolator(int maxViews) {
this.maxViews = maxViews;
}
@Override
public long calculateDuration(long currentDuration, long viewCount) {
if (viewCount >= maxViews) {
return 0;
}
if (viewCount == 1) {
return currentDuration;
}
double viewCountAsPercent = (double) maxViews / viewCount;
return (long) (currentDuration - (currentDuration / viewCountAsPercent));
}
}