package com.example.widget; import android.content.Context; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.util.AttributeSet; import android.view.View; import org.alfonz.utility.ResourcesUtility; public class ScalingFloatingActionButtonBehavior extends FloatingActionButton.Behavior { private int mActionBarSize; public ScalingFloatingActionButtonBehavior(Context context, AttributeSet attrs) { super(context, attrs); mActionBarSize = ResourcesUtility.getDimensionPixelSizeValueOfAttribute(context, android.R.attr.actionBarSize); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { return super.layoutDependsOn(parent, child, dependency) || dependency instanceof AppBarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) { if(dependency instanceof AppBarLayout) { return updateFab(child, dependency); } else { return super.onDependentViewChanged(parent, child, dependency); } } private boolean updateFab(FloatingActionButton child, View dependency) { float toolbarPosition = dependency.getY(); // toolbar is gone if(toolbarPosition + mActionBarSize == 0) { child.hide(); } // toolbar is visible else { child.show(); } return toolbarPosition != 0; } }