转载请注明出处:
http://blog.csdn.net/user11223344abc/article/details/78080671
出自【蛟-blog】
0.前言
本文分为俩个Step来研究如何自定义一个合格的LinearlayoutMnager。
- Step 1:视觉上定义一个具备上下边界的RecyclerView.layoutMnager
这里边又分为几个小步,后面会细说。 - Step 2:item回收,以及性能的验证
当然我们不能满足于视觉上,条目的离屏回收和复用是一个合格Rv的基本标准。
内容涉及到部分原理,更多是代码层面的讲解,就是说,代码为什么这样写
Ps:第1主要是描述的一些基础,在1.3内有关于回收机制的叙述,若有基础的同学不想看预备知识点,而只想看实现细节,则可以直接跳到第2,3步,看实现细节的分析。
1.准备知识
1.0.自定义的第一步:extends RecyclerView.LayoutManager
看看系统给我们提供的3个LayoutManager:
LinearLayoutManager
public class LinearLayoutManager extends RecyclerView.LayoutManager implements
ItemTouchHelper.ViewDropHandler, RecyclerView.SmoothScroller.ScrollVectorProvider {
.......
}
StaggeredGridLayoutManager
public class StaggeredGridLayoutManager extends RecyclerView.LayoutManager implements
RecyclerView.SmoothScroller.ScrollVectorProvider {
.......
}
GridLayoutManager,这个是LinearLayoutManager子类,本质上还是extends RecyclerView.LayoutManager。
public class GridLayoutManager extends LinearLayoutManager {
.......
}
所以,我们写出了如下代码:
public class CustomerLayoutManger extends RecyclerView.LayoutManager{
@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
return new RecyclerView.LayoutParams(RecyclerView.LayoutParams.WRAP_CONTENT,
RecyclerView.LayoutParams.WRAP_CONTENT);
}
/**
*
* @param recycler
* @param state
*/
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
super.onLayoutChildren(recycler, state);
}
}
1.1.关于generateDefaultLayoutParams()
这个方法就是RecyclerView Item的布局参数,换种说法,就是RecyclerView 子 item 的 LayoutParameters,若是想修改子Item的布局参数(比如:宽/高/margin/padding等等),那么可以在该方法内进行设置。
一般来说,没什么特殊需求的话,则可以直接让子item自己决定自己的宽高即可(wrap_content)。
public abstract LayoutParams generateDefaultLayoutParams();