RecyclerView浅析

A flexible view for providing a limited window into a large data set.

用来为大量数据集合提供有限窗口的灵活视图。通过数据展示、flexbile、视图复用等特性介绍RecyclerView

RecyclerView 数据展示设计思路:与ListView、GridView类似在有限窗口中展示大量数据集,复用成了他们的核心原理。

RecyclerView浅析_第1张图片
RecyclerView的职责就是将Datas中的数据以一定的规则进行展示,但其实RecyclerView只是一个ViewGroup,Data数据的具体结构不是很清晰。因此,RecyclerView需要一个Adapter(适配器模式)来与Datas绑定
RecyclerView浅析_第2张图片

RecyclerView 本质是一个ViewGroup,与常用的Layout一致,是View的容器。内部盛装的View来自于ViewHolder中的itemView,ViewHolder是根据Adapter要展示的内容与类型产生的。Adapter将要展示的内容、类型转换成对应的ViewHolder对其进行设置,然后RecyclerView把ViewHolder中的itemView展示出来。

Clinet:RecyclerView,Target:ViewHolder,Adapter:Adapter,Data:Adaptee—>适配器模式在RecyclerView中的体现。

RecyclerView浅析_第3张图片
RecyclerView表示只会和ViewHolder进行接触,而Adapter的工作就是将Data转换为RecyclerView认识的ViewHolder。因此RecyclerView就间接地认识了Datas。尽管Adapter已经将Datas转换为RecyclerView所熟知的View,但RecyclerView不管理这些View,它雇佣了一个叫做LayoutManager的大祭司来帮其完成布局(桥接模式),
RecyclerView浅析_第4张图片
LayoutManager协助RecyclerView来完成布局。但LayoutManager这个大祭司也有弱点,就是它只知道如何将一个一个的View布局在RecyclerView上,但它并不懂得如何管理这些View,如果大祭司肆无忌惮的玩弄View的话肯定会出事情,所以,必须有个管理View的护法,它就是Recycler,LayoutManager在需要View的时候回向护法进行索取,当LayoutManager不需要View(试图滑出)的时候,就直接将废弃的View丢给Recycler,
RecyclerView浅析_第5张图片
到了这里,有负责翻译数据的Adapter,有负责布局的LayoutManager,有负责管理View的Recycler,一切都很完美,但RecyclerView乃何等神也,它下令说当子View变动的时候姿态要优雅(动画),所以用雇佣了一个舞者ItemAnimator(观察者模式),因此,舞者也进入了这个图示:
RecyclerView浅析_第6张图片
如上,我们就是从宏观层面来对RecylerView有个大致的了解,可以看到,RecyclerView作为一个View,它只负责接受用户的各种讯息,然后将信息各司其职的分发出去。接下来我们将深入源码,详细讲解用到的设计模式,看看RecyclerView都是怎么来操作各个组件工作的。
RecyclerView浅析_第7张图片
P2

RecyclerView flexible 设计思路:

1、布局-----LayoutManager

RecyclerView将布局策略交给了LayoutManager,获取ViewHolder中的itemView,根据设置的布局策略对itemView布局然后添加到RecyclerView中。布局策略主要有LinearLayoutManager、GridLayoutManager、StagLayoutManager。

2、动画-----ItemAnimator

RecyclerView浅析_第8张图片
P3

RecyclerView 将动画机制交给了ItemAnimator,通过继承ItemAnimator实现其方法完成各式各样的动画效果。

作为一个展示大量数据的控件,当数据添加、删除、修改时通过调用Adapter notifyXXX方法。notify系列方法是发出一个事件,其工作原理是一个典型的观察者模式。RecyclerView是观察者,Adapter是可观察的;设置Adapter时RecyclerView订阅观察事件,当Adapter数据改变的时候通过RecyclerView并处理,触发重新布局,经过一些列处理将这些要展示的动画信息存储到ViewInfoStore中,在布局结束的时候通过ViewInfoStore统一处理并CallBack中方法调用ItemAnimator中方法执行动画。

3、装饰---ItemDecoration

RecyclerView内部在onDraw的时候执行ItemDecoration的onDraw,在draw的时候执行ItemDecorationonDrawOver,计算itemView的padding时将getItemOffses得到的Rect加入其中,从而空出装饰内容的区域。

RecyclerView 视图复用设计思路

RecyclerView浅析_第9张图片
P4

Recycler:is responsible for managing scrapped or detached item views for reuse.负责管理成为碎片的视图或者已经detached的视图,而从实现View的复用。

RecyclerViewPool:lets you share Views between multiple RecyclerViews.可以让你在多个RecyclerView之间分享视图。

你可能感兴趣的:(RecyclerView浅析)