package org.solovyev.android.calculator.view;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
public class PagerViewFabBehavior extends FloatingActionButton.Behavior {
public PagerViewFabBehavior() {
super();
}
public PagerViewFabBehavior(Context context, AttributeSet attributeSet) {
super();
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,
FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
if (!child.isClickable()) {
return false;
}
switch (nestedScrollAxes) {
case ViewCompat.SCROLL_AXIS_HORIZONTAL:
return target instanceof ViewPager;
case ViewCompat.SCROLL_AXIS_VERTICAL:
return target instanceof RecyclerView;
default:
return false;
}
}
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
onScroll(child, dxConsumed, dyConsumed);
}
@Override
public boolean onNestedFling(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
View target, float velocityX, float velocityY, boolean consumed) {
return onScroll(child, velocityX, velocityY);
}
private boolean onScroll(FloatingActionButton child, float scrollX, float scrollY) {
if (scrollY > 0 && child.getVisibility() == View.VISIBLE) {
child.hide();
return true;
} else if (scrollY < 0 && child.getVisibility() != View.VISIBLE) {
child.show();
return true;
} else if (scrollX != 0 && child.getVisibility() != View.VISIBLE) {
child.show();
return true;
}
return false;
}
}