我想实现类似于此示例的行为
但没有工具栏移动,并且对于FAB而言不是自定义视图。因此,首先,我想看到类似于https://www.google.com/design/spec/components/bottom-sheets.html的布局(它可以是放置在屏幕底部的一些子视图的简单LinearLayout),当我开始向下滚动listview时隐藏,而向上滚动则显示。已经深入研究网络,但没有发现真正有效的方法。提前致谢。
最佳答案
首先,您需要扩展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
时显示FAB,所有这些条件仅在Math.abs(velocityY) > Math.abs(velocityX)
时显示。换句话说,只有在出现垂直猛击时。关于android - Android FAB行为与ListView自定义布局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34027192/