Skip to content

Instantly share code, notes, and snippets.

@xleon
Created April 17, 2017 21:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xleon/2249aba606f5258957af505153ca91f3 to your computer and use it in GitHub Desktop.
Save xleon/2249aba606f5258957af505153ca91f3 to your computer and use it in GitHub Desktop.
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right|end"
android:layout_margin="@dimen/fab_margin"
local:backgroundTint="@color/accent"
local:rippleColor="@color/primary"
local:theme="@style/Base.Widget.AppCompat.ImageButton"
android:elevation="4dp"
android:src="@drawable/add"
local:layout_behavior="Droid.Helpers.ScrollAwareFloatingAactionButtonBehavior"/>
using Android.Content;
using Android.Support.Design.Widget;
using Android.Support.V4.View;
using Android.Util;
using Android.Views;
using Java.Interop;
namespace Droid.Helpers
{
public class ScrollAwareFloatingAactionButtonBehavior : CoordinatorLayout.Behavior
{
private readonly VisibilityListener _visibilityListener;
public ScrollAwareFloatingAactionButtonBehavior(Context context, IAttributeSet attrs)
{
_visibilityListener = new VisibilityListener();
}
public override bool OnStartNestedScroll(CoordinatorLayout coordinatorLayout, Java.Lang.Object child, View directTargetChild, View target,
int nestedScrollAxes)
{
return nestedScrollAxes == ViewCompat.ScrollAxisVertical;
}
public override void OnNestedScroll(CoordinatorLayout coordinatorLayout, Java.Lang.Object child, View target, int dxConsumed, int dyConsumed,
int dxUnconsumed, int dyUnconsumed)
{
base.OnNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
var fab = child.JavaCast<FloatingActionButton>();
if (dyConsumed > 0 && fab.Visibility == ViewStates.Visible)
{
fab.Hide(_visibilityListener);
}
else if (dyConsumed < 0 && fab.Visibility != ViewStates.Visible)
{
for (var i = 0; i < coordinatorLayout.ChildCount; i++)
{
if (coordinatorLayout.GetChildAt(i) is Snackbar.SnackbarLayout)
{
fab.Show();
return;
}
}
fab.TranslationY = 0.0f;
fab.Show();
}
}
private class VisibilityListener : FloatingActionButton.OnVisibilityChangedListener
{
public override void OnHidden(FloatingActionButton fab)
{
base.OnHidden(fab);
fab.Visibility = ViewStates.Invisible;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment