置顶RecyclerView

来源:互联网 发布:淘宝上的气味图书馆 编辑:程序博客网 时间:2024/04/28 09:14

简介

置顶:如果要一个View滑动到顶部,然后置顶,保持不动;滑动回来,跟随RecyclerView一起滚动。

最近对原有框架进行技术改造,ListView要换成RecyclerView,RecyclerView确实要比ListView灵活、可定制。之前给予ListView置顶方案要移到RecyclerView上面,这次只做了一个View的置顶,针对之前的置顶技术实现进行了调整,ListView置顶方案请参考github分享。

技术实现方案

分析功能效果,关键点在于置顶的View不能跟随RecyclerView划出屏幕,在置顶时,置顶View肯定要浮在RecyclerView上面,也就是说一定要有两层View,里面RecyclerView+外面FrameLayout(或其他View)。按照这一思路,我实现了两种解决方案:
1、在将TopView放到外部的FrameLayout中,TopView是真实的View; RecyclerView内部有一个EmptyView,EmptyView相当于占位置的。EmptyView监控TopView的高度变化,改变自己的高度;TopView监控EmptyView的滑动,一直跟随EmptyView,当EmptyView滑出屏幕时,TopView在顶部保持不动。

2、同样有个TopView放到外部FrameLayout中;EmptyView在RecyclerView内部占位;真实的View——TrueView,并不等于TopView。当EmptyView在屏幕范围内时,TrueView add 到EmptyView中;当EmptyView向上滑出屏幕时,TrueView 被加到TopView中。

方案1是最早实现的,也是ListView置顶的实现方案,但是用过几个版本后发现,当滑动置顶的TopView时,因为TopView==TrueView,并浮动在RecyclerView上面,导致RecyclerView没办法感知滑动,事件传不过来。所以QA大大认为这是个bug,必须改!我就以方案2实现了。

参数扩展

有的业务需求很特别,他们要求距离顶部有一定距离时就开始置顶,没办法,我只好加了一个SetTopParams参数,里面参数可扩展。

代码地址和效果图

效果图如下所示,第一张是不置顶情况,第二张是普通置顶,第三张是距离顶部100px置顶。
源码和demo可以去github下载。

置顶RecyclerView地址
置顶ListView地址

不置顶情况:
不置顶情况

普通置顶:
普通置顶

距离顶部100px置顶:
距离顶部100px置顶

原创粉丝点击