package info.papdt.pano.ui.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import info.papdt.pano.R;
import static info.papdt.pano.ui.util.UiUtility.*;
/*
* A hacky Behavior class for FloatingActionButton to collapse
* With the AppBarLayout
* Only works with a collapsing toolbar (AppBarLayout)
*
*/
public class FABAutoHideBehavior extends CoordinatorLayout.Behavior
{
public FABAutoHideBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(final CoordinatorLayout parent, final View child, MotionEvent ev) {
if (!(child instanceof FloatingActionButton)) throw new IllegalArgumentException("Cannot work for non-FAB views");
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
View anchor = $(parent, lp.getAnchorId());
if (anchor == null) {
throw new IllegalStateException("must be anchored");
}
Object tag = anchor.getTag(R.id.appbar);
if (tag == null) tag = false;
if (!Boolean.parseBoolean(tag.toString())) {
final View appbar = $(parent, R.id.appbar);
final View toolbar = $(parent, R.id.toolbar);
anchor.getViewTreeObserver().addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
@Override
public void onDraw() {
int childHeight = child.getMeasuredHeight() + (parent.getMeasuredHeight() - child.getBottom());
int toolbarHeight = toolbar.getMeasuredHeight();
float translationY = appbar.getTranslationY();
child.setTranslationY(- translationY / (float) toolbarHeight * childHeight);
}
});
anchor.setTag(R.id.appbar, true);
}
return super.onInterceptTouchEvent(parent, child, ev);
}
}