本文主要介绍如何实现类似新浪微博客户端下拉刷新效果的ListView。关于其使用见下拉刷新ListView的使用。
示例APK地址:TrineaAndroidDemo
首先让我们看下效果
四张图分别为第一次下拉、第一次释放、第一次刷新中、第二次下拉的效果,其中的文本可以设置,可以下载Demo代码DropDownListViewDemo编译运行。下面看如何使用实现
1、源代码
见DropDownListView.java,其中注释明确。
项目地址见TrineaAndroidCommon@Github
2、原理
通过对ListView添加了一个刷新layout(源代码res/layout/drop_down_to_refresh_list_header.xml)作为header,在滚动中时不断改变header的高度和内容并记录一些状态,在用户手指离开屏幕时根据状态决定进行刷新还是放弃刷新。
主要是通过重写ListView的onTouchEvent和OnScrollListener的onScrollStateChanged、onScroll函数实现
先介绍下刷新状态共有四种,如下:
CLICK_TO_REFRESH 点击刷新状态,为初始状态
DROP_DOWN_TO_REFRESH 当刷新layout高度低于一定范围时,为此状态
RELEASE_TO_REFRESH 当刷新layout高度高于一定范围时,为此状态
REFRESHING 刷新中时,为此状态
2.1 onTouchEvent函数
public boolean onTouchEvent(MotionEvent event)根据用户在屏幕上的move事件,进行相应操作,如下:
ACTION_DOWN表示用户手指刚接触屏幕,会记录用户此时touch的点的y坐标,在下面调整高度时使用
ACTION_MOVE表示用户手指正在屏幕上移动,此时会不断调整header的高度,即下拉时刷新item部分高度的不断变化
ACTION_UP表示用户手指离开屏幕,此时会根据当前状态决定是进行刷新还是放弃刷新,若刷新调用用户设置的OnRefreshListener接口。
2.2 onScrollStateChanged函数
public void onScrollStateChanged(AbsListView view, int scrollState)
记录listView当前的滚动状态到currentScrollState,包括三种状态:
SCROLL_STATE_TOUCH_SCROLL ListView正在滚动中,并且手指尚未离开屏幕
SCROLL_STATE_FLING ListView仍在滚动中,但用户手指已经离开屏幕
SCROLL_STATE_IDLE ListView已经停止滚动
2.3 onScroll函数
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
根据listView当前的滚动状态即currentScrollState和当前刷新的状态不断修改header内容显示和刷新状态,如下:
ListView为SCROLL_STATE_TOUCH_SCROLL状态(按着不放滚动中)并且刷新状态不为REFRESHING
a. 刷新对应的item可见时,若刷新layout高度超出范围,则置刷新状态为RELEASE_TO_REFRESH;若刷新layout高度低于高度范围,则置刷新状态为DROP_DOWN_TO_REFRESH。
b. 刷新对应的item不可见,重置header
ListView为SCROLL_STATE_FLING状态(松手滚动中)
a. 若刷新对应的item可见并且刷新状态不为REFRESHING,设置position为1的(即第二个)item可见
b. 若反弹回来,设置position为1的(即第二个)item可见
相关推荐
手撸弹性下拉刷新ListView,100行就搞定。弄懂原理,其他可复制.
强大的Android下拉刷新框支持下拉刷新、上拉加载、二级刷新、越界回弹、越界拖动,具有极强的扩展性,并集成了几十种炫酷的Header和 Footer。 支持横向刷新 支持多点触摸 支持淘宝二楼和二级刷新 支持嵌套多层的视图...
主要介绍了android实现listview下拉刷新和上拉刷新效果,Android的ListView上拉下拉刷新,原理都一样,在Touch事件中操作header/footer的paddingTop属性,需要的朋友可以参考下
介绍下拉刷新控件的应用、原理和特点。"ListView", "ExpandableListView", "GridView", "WebView", "ScrollView","Horizontal ScrollView", "ViewPager", "ListView Fragment", "WebView Advanced", "ListView in ...
Android自定义ListView,轻松实现上下拉刷新,一看就懂,一学就会,超简单,从原理出发。用别人的,不如会自己的。我已经将注释写的是否清楚,相信你看完此项目,已经对listview胸有成竹。
原理解析:一般将有下拉刷新的listview分成四种不同的状态来进行不同的显示效果。 1.完成状态done:listview正常显示状态 2.下拉状态pull:listview正在下拉时的状态 3.释放状态release:listview下拉后松开的...
主要为大家详细介绍了Android ListView实现上拉加载更多和下拉刷新功能,介绍了ListView刷新原理及实现方法,感兴趣的小伙伴们可以参考一下
最近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在网上直接找一个现成的,可是尝试了网上多个版本的下拉刷新之后发现效果都不怎么理想。有些是因为功能不完整或有Bug,有些是因为使用起来太复杂,...
这是在了解下拉刷新功能原理下的产物,下拉刷新可以说是国产APP里面必有的功能,连Google都为此出了SwipeRefreshLayout,一种MD风格的下拉刷新。 不过,MD风格在国内似乎很是艰难,不单单是国内系统主流仍是4.4的...
虽然刷新这个功能已经有各种各样的第三方框架可以选择,但是毕竟不是自己的嘛,今天我们就来实现一个自己的下拉刷新控件,多动手才能更好的理解。 效果图: 原理分析: 在coding之前,我们先分析一下原理,原理分析
关于listview的操作五花八门,有下拉刷新,分级显示,分页列表,逐页加载等,以后会陆续和大家分享这些技术,今天讲下下拉加载这个功能的实现。最初的下拉加载应该是ios上的效果,现在很多应用如新浪微博等都加入了...
原理和listview一样 ,都是重写Android原生控件。下面小编通过实例代码给大家分享GridView基于pulltorefresh实现下拉刷新 上拉加载更多功能,非常不错,一起看看吧
an-easy-pulltorefresh-realizationAndroid PullToRefresh的简易实现原理,主要是分析,便于定制修改和以后自己实现一、定制PullToRefresh的思路(主要是针对实现自动上拉加载更多:实现OnLastItemVisibleListener...
序言 国庆放假过后眼看一年又要过完了,年初指望着已经有一年的经验本以为自己不是刚出校的学生以为翅膀已经硬了,打算辞职...这个是listview的效果还有一个ScrollView的效果当然使用和实现时一样的原理这里就一listvie
当界面下滑到一定数量的时候,就会看到一个“查看更多”,然后突然停顿一下,系统会通过网络去给你刷新其他动态信息,这样的功能我们一般叫做数据下拉刷新功能,也就是我们的分页加载功能,具体的实现是怎样的呢?...
XListView 下拉刷新 上拉分页加载更多 布局文件 ...它的实现原理也比较简单,在此也感谢这位大神给我们提供的这个开源的ListView,使我们在开发中节省了不少时间。 下面分别分析其下拉刷新与上拉加载的实现过程。
Android ListView下拉刷新 Demo.zip Android SMS 短信内容显示在一个 泡泡 形状的窗口中.zip Android 打包签名 从生成keystore到完成签名.zip android 面试题 安卓巴士总结.zip Android-QuickSearchBox程序源码.zip ...
Android下拉刷新控件(ListView好ScrollView版).zip Android系统原理与开发要点详解_培训课件.zip Android中国象棋源码.zip Android远程登录含有loading登录效果~~完整代码和超级详细注释.zip 获取手机屏幕尺寸的...