package com.reactnativenavigation.animation;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.view.View;
import android.view.animation.OvershootInterpolator;
import com.reactnativenavigation.params.SlidingOverlayParams.Position;
import static android.view.View.TRANSLATION_Y;
public class PeekingAnimator {
private static final int SLIDE_OUT_DURATION = 300;
private static final int SLIDE_IN_DURATION = 600;
private final Animator animator;
public PeekingAnimator(View view, Position position, final boolean show) {
final int offsetPixels = view.getHeight() * (position == Position.Top ? -1 : 1);
this.animator = show ?
createSlideInAnimator(view, offsetPixels) :
createSlideOutAnimator(view, offsetPixels);
}
public void addListener(Animator.AnimatorListener listener) {
this.animator.addListener(listener);
}
public void animate() {
animator.start();
}
private ObjectAnimator createSlideInAnimator(View view, int offset) {
view.setTranslationY(offset);
ObjectAnimator slideIn = ObjectAnimator.ofFloat(view, TRANSLATION_Y, 0);
slideIn.setDuration(SLIDE_IN_DURATION);
slideIn.setInterpolator(new OvershootInterpolator(0.8f));
return slideIn;
}
private ObjectAnimator createSlideOutAnimator(View view, int offset) {
ObjectAnimator slideOut = ObjectAnimator.ofFloat(view, TRANSLATION_Y, offset);
slideOut.setDuration(SLIDE_OUT_DURATION);
return slideOut;
}
}