//this example is for recyclerView but it can be used somewhere else
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
hideFab();
} else if (dy < 0) { showFab(); } } }); //magic happens here private void hideFab() { if (isFabShowing) { isFabShowing = false; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
final Point point = new Point();
getActivity().getWindow().getWindowManager().getDefaultDisplay().getSize(point);
final float translation = fab.getY() - point.y;
fab.animate().translationYBy(-translation).start();
} else {
Animation animation = AnimationUtils.makeOutAnimation(getActivity(), true);
animation.setFillAfter(true);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
fab.setClickable(false);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
fab.startAnimation(animation);
}
}
}
private void showFab() {
if (!isFabShowing) {
isFabShowing = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
fab.animate().translationY(0).start();
} else {
Animation animation = AnimationUtils.makeInAnimation(getActivity(), false);
animation.setFillAfter(true);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
fab.setClickable(true);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
fab.startAnimation(animation);
}
}
}