首先,您需要扩展default FAB behavior,以便在显示Snackbar时保持FAB行为.否则,当Snackbar弹出时,您会看到它没有向上翻译.
仅对垂直滚动做出反应:
@Override
public boolean onStartNestedScroll(CoordinatorLayout parent,
View child, View target, View target,int scrollAxes) {
return (scrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0;
}
一旦你有垂直嵌套滚动累积滚动了多少.滚动FAB高度时开始翻译FAB:
Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dx, int dy, int[] consumed) {
if (dy > 0 && mTotalDy < 0 || dy < 0 && mTotalDy > 0) {
mTotalDy = 0;
}
mTotalDy += dy;
if ( mTotalDy > child.getHeight()
&& child.getVisibility() == View.VISIBLE) {
//translate to it's height, offscreen, set visbility to gone at end of translation animation
} else if (mTotalDy < 0
&& child.getVisibility() == View.GONE) {
//translate to 0 set visbility to visible at end of translation animation
}
}
当mTotalDy大于FAB高度时,我们向下滚动,当mTotalDy我们向上滚动时.
您还应该在onNestedPreFling()方法中处理嵌套的flinging.当velocityY Math.abs(velocityX).换句话说,只有在有垂直投掷时.