谈谈安卓中的下拉刷新,上拉加载ListView的实现
2014-09-30 11:34
351 查看
下拉刷新本是ios上的效果,后来在android中也大量采用,但是我一直没有找到一个在性能和效果上都可以比肩ios的那种控件,有些控件效果不错但是滑动不流畅,有些很流畅但是效果突兀,比如oschina的客户端,后来看了看oschina的下拉刷新代码,觉得他这个可以自己修改一下,自己动手修改之后才发现,一个小小的下拉刷新,上拉加载其实有很多细节难以处理,直到现在我都还没有把oschina的控件改完美(我说的完美是美观、自然、流畅并且api简单,其实oschina的代码写的很乱),我的最终目的是要得到这样一个listview:
1.下拉的时候有一定的阻尼效果
oschina的下拉在这点上做的最差,轻轻一拉就跑了飞远。
2.手指不松开来回的下拉滑动速度不变,位移相同的情况下,和状态有关的图标与文字指示都是一一致的。
其中“位移相同的情况下,和状态有关的图标与文字指示都是一一致的”这一点很容易做到,但是“手指不松开来回的下拉滑动速度不变”这点不容易做到,因为一般来说下拉刷新的原理都是通过添加一个listview的headerview实现的,当headerview出现的时候,来回移动会跟listview本身的scroll滚动冲突,假如第一次下拉有阻尼效果,按住不松开,回到顶部,再次下拉的时候这个阻尼效果消失了(注意这个过程始终没有松开)。这是绝大多数下拉刷新控件都具有的问题。
3.listview头部提示部分的高度变化是渐进的,平滑的
很多下拉刷新控件在松开的时候一下子就跳到了刷新状态,当刷新完成一下子又跳到了没有头部的状态,这让人感觉非常不爽。
4.下拉刷新的api应该尽可能简单,使用起来最好和ListView本身差别不大,用户不需要非常小心就能完美实现。
oschina的下拉刷新控件中headerview 和 footerview的布局都需要用户自己去定义,使用起来很麻烦。
5.虽然实现了下拉刷新,但是这个功能不应该影响到listview本身的滑动性能。
记得又一个被大量使用的下拉刷新控件,忘了名字了,使用之后能明显感觉到listview的性能下降很多,但是因为UI做的好加上还有很多其他的花哨功能,被很多app采用。
虽然我多次提到oschina在下拉刷新的处理上的不足,但是他给我们提供了实现下拉刷新listview的基本原理:重写onTouchEvent 根据手势位移改变listview的headerview。
在oschina的listview的基础上我基本做到了1、3、4、5点但是第二点还做不到,也没想好解决办法。
但是在网上我找到一个解决了上述5点绝大多数问题的第三方控件,XListView
现在我都不知道是继续去修补那个oschina的控件还是直接采用XListView了。。。
XListView的git地址:
https://github.com/Maxwin-z/XListView-Android/tree/master/src
效果截图:
转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0729/1636.html
1.下拉的时候有一定的阻尼效果
oschina的下拉在这点上做的最差,轻轻一拉就跑了飞远。
2.手指不松开来回的下拉滑动速度不变,位移相同的情况下,和状态有关的图标与文字指示都是一一致的。
其中“位移相同的情况下,和状态有关的图标与文字指示都是一一致的”这一点很容易做到,但是“手指不松开来回的下拉滑动速度不变”这点不容易做到,因为一般来说下拉刷新的原理都是通过添加一个listview的headerview实现的,当headerview出现的时候,来回移动会跟listview本身的scroll滚动冲突,假如第一次下拉有阻尼效果,按住不松开,回到顶部,再次下拉的时候这个阻尼效果消失了(注意这个过程始终没有松开)。这是绝大多数下拉刷新控件都具有的问题。
3.listview头部提示部分的高度变化是渐进的,平滑的
很多下拉刷新控件在松开的时候一下子就跳到了刷新状态,当刷新完成一下子又跳到了没有头部的状态,这让人感觉非常不爽。
4.下拉刷新的api应该尽可能简单,使用起来最好和ListView本身差别不大,用户不需要非常小心就能完美实现。
oschina的下拉刷新控件中headerview 和 footerview的布局都需要用户自己去定义,使用起来很麻烦。
5.虽然实现了下拉刷新,但是这个功能不应该影响到listview本身的滑动性能。
记得又一个被大量使用的下拉刷新控件,忘了名字了,使用之后能明显感觉到listview的性能下降很多,但是因为UI做的好加上还有很多其他的花哨功能,被很多app采用。
虽然我多次提到oschina在下拉刷新的处理上的不足,但是他给我们提供了实现下拉刷新listview的基本原理:重写onTouchEvent 根据手势位移改变listview的headerview。
在oschina的listview的基础上我基本做到了1、3、4、5点但是第二点还做不到,也没想好解决办法。
但是在网上我找到一个解决了上述5点绝大多数问题的第三方控件,XListView
现在我都不知道是继续去修补那个oschina的控件还是直接采用XListView了。。。
XListView的git地址:
https://github.com/Maxwin-z/XListView-Android/tree/master/src
效果截图:
转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0729/1636.html
相关文章推荐
- 安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能
- 安卓自定义ListView实现上拉加载、下拉刷新
- 使用安卓自带刷新控件实现ListView的上拉加载和下拉刷新
- 用ListSwipeRefreshLayout实现安卓listView下拉刷新,上拉加载
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android SwipeRefreshLayout与ListView结合实现下拉刷新,加载功能
- ListView下拉刷新上拉加载更多实现
- Android ListView实现下拉刷新、加载更多
- Android之实现ListView的“下拉刷新”、“上拉加载”、“自动加载”功能(一)
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- android UI进阶之实现listview的下拉刷新和加载
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- Android 自定义ListView 实现下拉刷新 上拉加载功能
- ListView实现下拉刷新-2-将顶部布局加载到ListView中
- Android ListView下拉刷新上拉加载更多的实现
- android ListView上拉加载更多 下拉刷新功能实现(采用pull-to-refresh)
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
- Android UI--自定义ListView(实现下拉刷新+加载更多)