RecyclerView的布局流程
官方简介:A flexible view for providing a limited window into a large data set.
一种用于在有限的窗口展示大量数据集的灵活的视图;
RecyclerView在设计方面上非常的灵活,不同的部分承担着不同的职责。其中Adapter负责提供数据,包括创建ViewHolder和为ViewHolder绑定数据,LayoutManager负责ItemView的测量和布局,ItemAnimator负责每个ItemView的动画,ItemDecoration负责每个ItemView的间隙,Recycler负责ItemView的回收和复用。这种插拔式的架构使得RecyclerView变得非常的灵活,开发者可以根据自身的需求来定义不同的部分。
dispatchLayoutStep1
- Adapter的更新;
- 决定该启动哪种动画;
- 保存当前View的信息(getLeft(), getRight(), getTop(), getBottom()等);
- 如果有必要,先跑一次布局并将信息保存下来。
dispatchLayoutStep2
真正对子View做布局的地方。
- 计算锚点,以锚点开始填充RecyclerView(就是执行fill方法)。
- 执行fill方法,判断RecyclerView是否还有空间,如果有,执行layoutChunk方法,直至填充满。
- layoutChunk方法中,寻找到当前要添加的子view,add到RecyclerView中。
- 对子view进行measure和layout。
dispatchLayoutStep3
为动画保存View的相关信息; 触发动画; 相应的清理工作。
其实dispatchLayoutStep3()就是做了一些收尾工作,将一些变量重置,处理下动画。
mState.mLayoutStep
- 初始化为STEP_START
- 执行完dispatchLayoutStep1后,mState.mLayoutStep = State.STEP_LAYOUT;
- 执行完dispatchLayoutStep2后,mState.mLayoutStep = State.STEP_ANIMATIONS;
- 执行完dispatchLayoutStep3后,mState.mLayoutStep = State.STEP_START;
RecyclerView 源码分析(一) - RecyclerView的三大流程
RecyclerView剖析
深入分析RecyclerView源码——布局流程(上)
深入了解RecyclerView预布局状态(preLayout)