package com.kaichunlin.transition.transformer;
import android.view.View;
import com.kaichunlin.transition.internal.TransitionController;
/**
* The progress valued passed to @link {@link #updateView(TransitionController, View, float)} has taken the start and end range
* into consideration. The method will only be called when the progress is within range, and the value passed has been scaled to be
* always between 0f to 1f.
*/
public abstract class ScaledTransformer implements ViewTransformer {
private final boolean updateOnceOutsideRange;
private boolean updateMinProgress = true;
private boolean updateMaxProgress = true;
public ScaledTransformer() {
this(false);
}
public ScaledTransformer(boolean updateOnceOutsideRange) {
this.updateOnceOutsideRange = updateOnceOutsideRange;
}
@Override
public final void updateView(TransitionController controller, View target, float progress) {
final float start = controller.getStart();
final float end = controller.getEnd();
if (progress < start) {
if (updateOnceOutsideRange && updateMinProgress) {
updateViewScaled(controller, target, 0);
}
updateMinProgress = false;
return;
}
updateMinProgress = true;
if (progress > end) {
if (updateOnceOutsideRange && updateMaxProgress) {
updateViewScaled(controller, target, 1);
}
updateMaxProgress = false;
return;
}
updateMaxProgress = true;
updateViewScaled(controller, target, (progress - start) / (end - start));
}
/**
* @param controller
* @param target
* @param scaledProgress
*/
protected abstract void updateViewScaled(TransitionController controller, View target, float scaledProgress);
}