前言:
虽然刷新加载的开源框架有很多,但是还是觉得PullToRefresh最好用,易于扩展,可配置项也比较多。接下来会用一系列博客来分析该框架的使用以及扩展。
一、 闲扯
相信大家都有一批自己收藏的刷新加载框架,样式千变万化,效果炫酷。
但是真正用的时候就是那几样,应为我们的需求是这样的,“你给我做一个跟微博样的刷新”、“京东的刷新效果不错,我们仿一仿”。当我们听到之后的心情是这样的。骂完之后我们就去找在那个框架上修改比较好,有没有一劳永逸的方式呢?答案是肯定的,没有。但是我们可以尽可能的懒点。
二、为毛PullToRefresh
也许有朋友会说为什么PullToRefresh,而不是其他的刷新加载框架呢?我觉得xxx也挺好啊,代码简单,而且可以加载任意布局,为毛看不起人家。
说明下:
- PullToRefresh是很多项目都是用的框架,我也是收罗了很多刷新加载框架,最后还是选择
PullToRefresh,并不是说它有多么牛X,只是很多效果我们用它就可以实现或者是只要做简单的扩展。
- 至于用PullToRefreshListView只能是ListView,
PullToRefreshGridView只能是
GridView,其实是PullToRefreshScrollView不就是想放什么就放什么吗。我想用RecyclerView,ListView不能体现出我高大的逼格
。其实扩展PullToRefreshRecyclerView也是比较简单的,如果大家嫌麻烦,我后续会提供的。
-
PullToRefresh不是万能的,也不能满足奇形怪状的
需求,使用的原则是更快更高效的满足需求以及能留下需求更改的空间,说不准什么时候需求又改了。
三、源码下载
该项目依然是托管在gitHub上,首先把源码下载下来。项目地址
二、为毛PullToRefresh
也许有朋友会说为什么PullToRefresh,而不是其他的刷新加载框架呢?我觉得xxx也挺好啊,代码简单,而且可以加载任意布局,为毛看不起人家。
说明下:
说明下:
- PullToRefresh是很多项目都是用的框架,我也是收罗了很多刷新加载框架,最后还是选择
PullToRefresh,并不是说它有多么牛X,只是很多效果我们用它就可以实现或者是只要做简单的扩展。
- 至于用PullToRefreshListView只能是ListView,
PullToRefreshGridView只能是GridView,其实是PullToRefreshScrollView不就是想放什么就放什么吗。我想用RecyclerView,ListView不能体现出我高大的逼格。其实扩展PullToRefreshRecyclerView也是比较简单的,如果大家嫌麻烦,我后续会提供的。
-
PullToRefresh不是万能的,也不能满足奇形怪状的需求,使用的原则是更快更高效的满足需求以及能留下需求更改的空间,说不准什么时候需求又改了。
三、源码下载
四、UI结构
1. 结构拆分
- 结构比较简单就是顶部的“刷新头部”、底部的“加载尾部”以及中间的“内容区域”。如下图所示:
2. 结构组合
- 既然UI结构自上而下分为三段,头部、尾部和内容区域,那么在LinearLayout中放置三个ViewGroup类型的布局就可以了;
- 其中"刷新头部"、"加载尾部"按照给定的样式来写,当然有的可能只有"刷新头部"或只有"加载尾部";
- 正常情况下隐藏"刷新头部"和"加载尾部";
- "内容区域"可以响应手指在屏幕Y方向滑动事件;
- "内容区域"向下滑动显示"刷新头部"布局,向上滑动显示"加载尾部"布局;
- "内容区域"随手指滑动到一定位移则促发刷新或加载的动作;
五、项目结构
挑选出PullToRefresh框架中最简单的PullToRefreshScrollView,来看下类图:
通过类图可以得到以下结论
- PullToRefreshScrollView非常简单,只是覆盖了3个父类的抽象方法;
- PullToRefreshBase类代码非常多,定义了刷新加载的绝大部分逻辑;
- PullToRefreshBase的操作依靠IPullToRefresh接口规范;
- 我们所说的三部分在PullToRefreshBase中体现为HeaderLayout、FooterLayout、RefreshableViewWrapper(刷新布局的父控件),这里相当于一个容器来存放可以刷新的布局,在PullToRefreshScrollView中就是存放的ScrollView;