RecyclerView作为最常用的控件... 唉,最近真心累,本来计划是每天一篇的...奈何太忙,先占个坑吧..这篇文章主要介绍RecycerView常见的效果,原理效少,慢慢等吧(。・`ω´・)
一、复杂布局

- 用GridLayoutManager.setSpanSizeLookup方法实现.
getSpanSize(int position) 返回值特点 :假设初始GridLayoutManager时构造中传入值为4,那么我们返回4的一半即(2/4)时显示两个条目,返回可以整除的值时显示一个条目,除不断时则返回默认显示条目数量.
利用条目类型加载不同的ViewHolder实现条目内容的不同,位置及数量的显示则由getSpanSize的返回值决定.
缺点:条目类型越多ViewHolder就越多,RecyclerView内部的判断就会越庸肿,如何将这些庸肿的判断剔除出来呢?
如何改进?
二、下拉加载
下拉加载不同数据,首先要做的就是判断条目位置,如何判断条目位置呢?
三、添加Head和Foot
在RecyclerView里添加头和脚不难,因为头与脚也可以看做成一种条目类型,所以加头加脚说白了也只是增加条目类型而以,除此外还有一个问题,那便是如果将布局插入指定位置,好在RecyclerView也有提供相应的方法实现.
面向过程的写法:
面向对象的写法:
考虑到在日后的工作中可能经常会遇到这样的需求,以硬编码的方式实现该功能,无疑耦合度过高,以后用到时都需要更改相应的方法,因此最好是将加头加脚的操作抽取出来。这里用装饰设计模式.
- 装饰设计模式:
四、拖拽

-
-
int getMovementFlags (RecyclerView , viewHolder):条目的移动方式.
-
onMove():某个条目的位置移动时调用,回调后应该将原来条目位置移动新位置.
-
onSwiped():某个条目滑动时调用,根据getMoementFlags方法的返回值决定是否调用,一但开始滑动则会调用clearView方法.
-
isLongPressDragEnabled():决定是否可以拖拽.
-
onSelectedChanged(ViewHolder, int):在每次View Holder的状态变成拖拽 (ACTION_STATE_DRAG) 或者 滑动 (ACTION_STATE_SWIPE)的时候被调用。这是把你的item view变成激活状态的最佳地点
-
clearView(RecyclerView, ViewHolder):在一个view被拖拽然后被放开的时候被调用,同时也会在滑动被取消或者完成ACTION_STATE_IDLE)的时候被调用。这里是恢复item view idle状态的典型地方。
-

五、仿ViewPage

现在用RecyclerView实现ViewPage的横向滚动很简单,官方提供了第三方的支持库,我们只需要将RecyclerView将由此库就可实现类似ViewPage的效果,代码如下:
new LinearSnapHelper().attachToRecyclerView(recyclerView);
效果图之所以会显示两边的条目,是因为我并没有将条目的宽度设置为match_parent
,如果你只想显示单个条目只需要将宽度设置为match_parent
即可,同理若想条目之间有间隔只需设置layout_margin
属性.
5.1、添加动画效果
// ...
六、自定义ItemDecoration、ItemAnimator、LayoutManage
- LayoutManage
RecyclerView的缓存机制
网友评论