解决 RecyclerView AppBarLayout 滑动不顺畅的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决 RecyclerView AppBarLayout 滑动不顺畅的问题相关的知识,希望对你有一定的参考价值。

参考技术A 如果你又看过 cheesesquare 这个项目就知道,在详情页滑动的时候有一些粘性,体验不是很好。
有人在YouTube上上传了现象 视频地址
stackoverflow 上也有人讨论这个问题,视频也是在这个问题下面看到的。
前段时间在项目用到 AppBarLayout 加 RecyclerView的时候,产品经理和设计师对这个效果都不满意。
so....只能填坑了。

stackoverflow 上也有提及这个问题主要是由于 consumed 有时候在 onNestedFling 中计算不对导致的。
因此可以重写AppBarLayout的Behavior
这个答案可以解决这个问题 http://stackoverflow.com/a/32454407
当然记得在xml 为 AppBarLayout 设置上自定义的Behavior

还有一种情况可能体验不是很好,就是在 往上 fling 的时候,AppBarLayout没有拉下来,需要在拉一次才能下来,那时产品经理对这个也不是很满意。
这种情况下 consumed 的值为 true 即时经过修正之后也是为 true ,然后在看
super.onNestedFling 源码 发现这时候也是不会调用 fling 的。事实上大部分这时候 AppBarLayout 不去fling也是对的,因为这时候 AppBarLayout 应该在可见的视图之外。
于是后来打算去监听 RecyclerView的滚动,在滚动到第一条的时候展开 AppBarLayout,发现效果还不错

这时候滚动到顶部的时候,RecyclerView 有个波纹效果,导致看起来比较别扭,
给 RecyclerView 设置以下属性即可

github 上有个库也是解决这个问题的 smooth-app-bar-layout
当然解决的原理跟本文相差甚远,有兴趣可以阅读下,我自己也有用过,不过这个库比较蛋疼的就是得为RecyclerView 设置一个 head item, 这个 item 的高度必须跟 AppBarLayout 一样的高度,所以对于 wrap_content 就比较麻烦了,当然,这个跟这个库的实现思路有关系。

最后,希望本文能给准备入坑的同学少走一点弯路

RecyclerView嵌套RecyclerView点击Item时顶上去的解决方法

RecyclerView嵌套RecyclerView点击Item时顶上去的原因是焦点抢占的原因,解决方法
解决方法:holder.binding.rvContact.isFocusableInTouchMode = false  (kotlin语法哦)
注意:要在代码里面每次触发时设置,在xml里面一次性设置是无效的。

 

以上是关于解决 RecyclerView AppBarLayout 滑动不顺畅的问题的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView常见问题解决方案,RecyclerView嵌套自动滚动,RecyclerView 高度设置wrap_content 无作用等问题

无法解决:recyclerview-v7

解决ScrollView嵌套RecyclerView的显示及滑动问题

Recyclerview 刷新时整体布局跳动的解决办法

RecyclerView 正在复制项目可能的解决方案是啥?

一个RecyclerView的卡顿问题的解决