diff --git a/app/src/main/java/org/solovyev/android/calculator/view/PagerViewFabBehavior.java b/app/src/main/java/org/solovyev/android/calculator/view/PagerViewFabBehavior.java new file mode 100644 index 00000000..f46e04a5 --- /dev/null +++ b/app/src/main/java/org/solovyev/android/calculator/view/PagerViewFabBehavior.java @@ -0,0 +1,60 @@ +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) { + 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; + } +} diff --git a/app/src/main/res/layout-land/activity_tabs.xml b/app/src/main/res/layout-land/activity_tabs.xml index c69c26f9..5e89c09b 100644 --- a/app/src/main/res/layout-land/activity_tabs.xml +++ b/app/src/main/res/layout-land/activity_tabs.xml @@ -59,6 +59,7 @@ diff --git a/app/src/main/res/layout/activity_tabs.xml b/app/src/main/res/layout/activity_tabs.xml index 9fcc5115..53564df5 100644 --- a/app/src/main/res/layout/activity_tabs.xml +++ b/app/src/main/res/layout/activity_tabs.xml @@ -58,6 +58,7 @@