我想实现类似于此示例的行为
但没有工具栏移动和自定义视图不适用于FAB。所以,首先我希望看到类似于https://www.google.com/design/spec/components/bottom-sheets.html的布局(它可以是简单的LinearLayout放置在屏幕底部,带有一些子视图),当我开始向下滚动列表视图时会隐藏它,当我向上滚动一点时出现。已深入挖掘网络,但没有找到真正有用的东西。提前谢谢。
答案 0 :(得分:1)
首先,您需要扩展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()
方法处理嵌套投掷。在velocityY < 0
时隐藏FAB并在velocityY > 0
时显示,所有这些条件仅在Math.abs(velocityY) > Math.abs(velocityX)
时显示。换句话说,只有在有垂直投掷时。