gpt4 book ai didi

android - 在 AppBarLayout 折叠之前防止 RecyclerView 在 AppBarLayout 下滚动

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:58:04 27 4
gpt4 key购买 nike

我正在创建一个带有 header 的 RecyclerView,当您向上滚动 RecyclerView 时 header 会折叠。我可以通过下面的布局非常接近地实现这一点,使用透明的 AppBarLayout 和作为标题的 MyCoolView。视差效果很好。

但是,如果标题仍然可见并且我打开了 RecyclerView,则 RV 会缓慢滚动到顶部并且一些项目位于工具栏下方,直到 RV 到达 View 顶部。我一直在玩弄 scrollFlags 但没有取得理想的结果。关于如何改善 throw 体验以使项目不被剪裁有什么建议吗?

观看视频并在它被抛出时观看 --- https://www.dropbox.com/s/jppd6m7zo41k23z/20160609_151309.mp4?dl=0

<android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.AppBarLayout
android:background="#00000000">

<android.support.design.widget.CollapsingToolbarLayout
app:layout_scrollFlags="scroll|exitUntilCollapsed">

<com.android.myapp.MyCoolView
app:layout_collapseMode="parallax"/>

</android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<android.support.v7.widget.RecyclerView/>

</android.support.design.widget.CoordinatorLayout>

最佳答案

可能的解决方案(未经测试)。将 OnOffsetChangedListener 添加到您的 AppBarLayout,并记下偏移值。首先声明这个字段:

private boolean shouldScroll = false;

然后,onCreate:

AppBarLayout appbar = findViewById(...);
appbar.addOnOffsetChangedListener(new OnOffsetChangedListener() {
@Override
void onOffsetChanged(AppBarLayout appbar, int offset) {
// Allow recycler scrolling only if we started collapsing.
this.shouldScroll = offset != 0;
}
});

现在,向您的 RecyclerView 添加一个滚动监听器。每当它尝试滚动时,如果 AppBarLayout 仍在展开,则恢复滚动:

RecyclerView recycler = findViewById(...);
recycler.addOnScrollListener(new OnScrollListener() {
@Override
void onScrolled(RecyclerView recycler, int dx, int dy) {
// If AppBar is fully expanded, revert the scroll.
if (!shouldScroll) {
recycler.scrollTo(0,0);
}
}
});

虽然这可能需要一些调整。我看到两个问题:

  • 如果 scrollTo() 调用 onScrolled() 返回,可能会导致堆栈溢出。可以用 bool 值或通过删除/添加滚动监听器来解决
  • 您可能不仅希望在 AppBarLayout 完全展开时阻止滚动,而且更普遍地希望在 AppBarLayout 未折叠时阻止滚动。这意味着您不必检查 offset != 0,而是检查 offset == appBarLayout.getTotalScrollRange()。我想。

关于android - 在 AppBarLayout 折叠之前防止 RecyclerView 在 AppBarLayout 下滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37737187/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com