作者 | Dajavu
地址 | http://www.jianshu.com/p/7bb7556bbe10
声明 | 本文是 Dajavu 原创,已获授权发布,未经原作者允许请勿转载
前言
我们都知道 RecyclerView 可以通过将 LayoutManager 设置为StaggeredGridLayoutManager 来实现瀑布流的效果。默认的还有LinearLayoutManager 用于实现线性布局,GridLayoutManager 用于实现网格布局。
然而RecyclerView可以做的不仅限于此,通过重写LayoutManager我们可以按自己的意愿实现更为复杂的效果。而且将控件与其显示效果解耦之后我们就可以动态的改变其显示效果。
设想有这么一个界面,以列表形式展示了一系列的数据,点击一个按钮后以网格形势显示另一组数据。传统的做法可能是在同一布局下设置了一个listview和一个gridview然后通过按钮点击事件切换他们的visiblity属性。而如果使用recyclerview的话你只需通过setAdapter方法改变数据,setLayoutManager方法改变样式即可,这样不仅简化了布局也实现了逻辑上的简洁。
效果图
下面我们就来介绍怎么通过重写一个 LayoutManager 来实现一个弧形的recycylerview 以及另一个会随着滚动在指定位置缩放的 recyclerview。并实现类似 viewpager 的回弹效果。
项目地址 Github
https://github.com/leochuan/CustomLayoutManager
通常重写一个 LayoutManager 可以分为以下几个步骤
指定默认的LayoutParams
测量并记录每个item的信息
回收以及放置各个item
处理滚动
指定默认的 LayoutParams
当你继承LayoutManager之后,有一个必须重写的方法
generateDefaultLayoutParams()
这个方法指定了每一个子view默认的LayoutParams,并且这个LayoutParams会在你调用getViewForPosition()返回子view前应用到这个子view。