如何使 FAB 在 AppBarLayout 在 CoordinatorLayout 中折叠之前对向下滚动事件做出反应

How to make the FAB react to downward scroll events before the AppBarLayout has collapsed in a CoordinatorLayout

我正在尝试为 FAB 编写自定义行为。目前,我从 here 中获取的行为从调用 CoordinatorLayout.Behavior class 中的 onNestedScroll() 方法开始控制 FAB 的可见性。

但是,onNestedScroll() 仅检测向下滚动事件(即当 dyConsumed > 0 时)(注意: dyConsumed 是 onNestedScroll[ 的参数=36=]) 一旦 AppBarLayout 到达屏幕顶部(即当 AppBarLayout 折叠时),NestedScrollView(或另一个垂直滚动视图)的内容是屏幕上唯一可见的滚动内容。

我希望在 AppbBarLayout 折叠之前用户向下滚动后 FAB 消失。

我尝试让 FAB 依赖于另一个视图:

 @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
       return dependency instanceof viewToDependOn;

    } 

然后当此视图更改状态时使视图消失:

   @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, final FloatingActionButton child, View dependency) {

     child.setVisibility(View.GONE); 

  return true;
    }

但是因为每次调用 FAB 依赖于方法的视图在触摸事件后过于频繁地调用 onDependentViewChanged,所以一旦 FAB 不可见我就无法再次显示它。

我的问题简而言之:如何在不依赖 AppBarLayout 的滚动事件的情况下切换 FAB 在 NestedScrollView 中的可见状态?

如果您需要更多代码,请告诉我,

提前致谢

你应该使用:

AppBarLayout.OnOffsetChangedListener

此方法:onOffsetChanged

onNestedScroll 只会检测与 collapsing/expanding AppBarLayout 无关的滚动事件。

在那里,你可以这样做:

if(verticalScroll == 0)
   // appBarLayout Expanded
else if(verticalScroll == appBarLayout.totalScrollRange())
  // appBarLayout Collapsed

并且hide/show你的FAB基于appBarLayout的一些偏移或collapse/expand模式