探索Android 下拉刷新效果的实现

下拉刷新的功能很常见,以新浪微博为例,下拉刷新获取新的微博。

这里也有两种实现的思路,一种有点类似于前面介绍的置顶标题的实现,即动态的画出下拉刷新这个View,但是LZ经过了很多尝试,发现和ListView的结合不是很好,所以没有成功,故而放弃,转向第二种思路,也就是网上资料比较多的一种思路:利用ListView的head来实现。

这里有几个最重要的点:

1. 如何展现和隐藏head。在未下拉的状态,或者惯性滑动的状态下,下拉刷新的View是不能被显示的,也就是平时的时候这个View应该是要被隐藏的,如何做到这一点呢。开始LZ尝试用layout方法重新布局,发现不管用,后来查了一些资料,发现原来在ListView中隐藏一项是用set一个小于0的padding值来实现的,这里顺利解决问题。

2. 关于刷新状态的把控。LZ在最初的实验过程中由于没有理清思路,在这里花了很长时间,后来才明白,刷新状态是一个必须明确的地方。并且必须和用户的操作结合。分析如下:当用户按下时(DOWN), 当且仅当用户处于第一页,能看到第一项时,进入一个可刷新的状态(FRESHABLE),其他都不作处理,保持原来的状态(DONE);当用户开始滑动时,用户向下滑动,但是滑动距离没有超过阀值(和下拉刷新VIew的高度相关),则进入开始状态(START),当且仅当用户向下滑动至超过阀值,进入刷新预备状态(FRESH),如果用户向上滑动,则还原到可刷新的状态(FRESHABLE);当用户释放(UP), 如果是FRESHABLE或者是DONE状态,则不用作处理,统一归到DONE状态,如果是START状态,则用户下拉的距离不够,释放之后回归到正常状态,并选中第一项,隐藏head,如果是FRESH状态,则说明用户下拉了足够的距离,释放之后应该开始刷新,完全显示head,进入刷新状态,刷新完成之后再回到DONE状态。

把握好重要的点之后,LZ终于实现了下拉刷新的效果。

上干货

相关推荐