package org.succlz123.doubanbooklog.support.com.shamanland.fab; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import org.succlz123.doubanbooklog.R; /** * Implementation of {@link View.OnTouchListener} which shows/hides specified view * when {@link #onScrollUp()} and {@link #onScrollDown()} events recognized. */ public class ShowHideOnScroll extends ScrollDetector implements Animation.AnimationListener { private final View mView; private final int mShow; private final int mHide; /** * Construct object with defaults animations {@link R.anim#floating_action_button_show} and {@link R.anim#floating_action_button_hide}. * * @param view null not allowed */ public ShowHideOnScroll(View view) { this(view, R.anim.floating_action_button_show, R.anim.floating_action_button_hide); } /** * Construct object with custom animations. * * @param view null not allowed * @param animShow anim resource id * @param animHide anim resource id */ public ShowHideOnScroll(View view, int animShow, int animHide) { super(view.getContext()); mView = view; mShow = animShow; mHide = animHide; } @Override public void onScrollDown() { if (mView.getVisibility() != View.VISIBLE) { mView.setVisibility(View.VISIBLE); animate(mShow); } } @Override public void onScrollUp() { if (mView.getVisibility() == View.VISIBLE) { mView.setVisibility(View.GONE); animate(mHide); } } private void animate(int anim) { if (anim != 0) { Animation a = AnimationUtils.loadAnimation(mView.getContext(), anim); a.setAnimationListener(this); mView.startAnimation(a); setIgnore(true); } } @Override public void onAnimationStart(Animation animation) { // empty } @Override public void onAnimationEnd(Animation animation) { setIgnore(false); } @Override public void onAnimationRepeat(Animation animation) { // empty } }