用于自定义布局的listview的Android FAB行为

时间:2015-12-01 18:11:14

标签: android listview material-design

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

image

但没有工具栏移动和自定义视图不适用于FAB。所以,首先我希望看到类似于https://www.google.com/design/spec/components/bottom-sheets.html的布局(它可以是简单的LinearLayout放置在屏幕底部,带有一些子视图),当我开始向下滚动列表视图时会隐藏它,当我向上滚动一点时出现。已深入挖掘网络,但没有找到真正有用的东西。提前谢谢。

1 个答案:

答案 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)时显示。换句话说,只有在有垂直投掷时。