我想实现类似于此示例的行为

android - Android FAB行为与ListView自定义布局-LMLPHP

但没有工具栏移动,并且对于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/

10-11 19:29