package com.reactnativenavigation.views.utils;
import android.animation.TypeEvaluator;
import android.graphics.Rect;
public class ClipBoundsEvaluator implements TypeEvaluator<Rect> {
private int fromWidth;
private int fromHeight;
private int toWidth;
private int toHeight;
private final Rect result = new Rect();
@Override
public Rect evaluate(float ratio, Rect from, Rect to) {
sync(from, to);
if (toHeight == fromHeight ) {
result.bottom = toHeight;
} else {
if (toHeight > fromHeight) {
result.bottom = (int) (toHeight - (toHeight - fromHeight) * (1 - ratio));
} else {
result.bottom = (int) (toHeight + (fromHeight - toHeight) * (1 - ratio));
}
}
if (toWidth == fromWidth) {
result.right = toWidth;
} else {
if (toWidth > fromWidth) {
result.right = (int) (toWidth - (toWidth - fromWidth) * (1 - ratio));
} else {
result.right = (int) (toWidth + (fromWidth - toWidth) * (1 - ratio));
}
}
return result;
}
private void sync(Rect from, Rect to) {
fromWidth = from.right;
fromHeight = from.bottom;
toWidth = to.right;
toHeight = to.bottom;
}
}