ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-10-06 22:29:28  阅读:186  来源: 互联网

标签:android-appbarlayout android android-design-library android-coordinatorlayout an


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

但是,如果标题仍然可见并且我扔了RecyclerView,则RV会慢慢滚动到顶部,并且某些项目位于工具栏下,直到RV到达视图的顶部.我一直在玩scrollFlags,但没有取得理想的结果.有关如何改善投掷体验的任何建议,以免物品被剪裁?

观看视频并观看它的精彩— 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(),则可能发生堆栈溢出.可以使用布尔值或通过删除/添加滚动侦听器来解决
>可能你想要防止滚动不仅在AppBarLayout完全展开时,而且更常见的是在AppBarLayout没有折叠时.这意味着您不必检查offset!= 0,而是检查offset == appBarLayout.getTotalScrollRange().我认为.

标签:android-appbarlayout,android,android-design-library,android-coordinatorlayout,an
来源: https://codeday.me/bug/20191006/1862818.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有