PullToRefreshListView实现下拉刷新
来源:互联网 发布:大数据技术起源行业 编辑:程序博客网 时间:2024/05/16 19:32
首先我们需要理解PullToRefreshListView是一个竖直的LinearLayout
具体的样式大致可以分为三部分,如下图
图中的mRefreshableView是一个listview,我们都知道,如果一个listview,那么他本身是可以有一个headview和footview的,也就是这个又可以具体分为下面这样:
下面我们来分析具体的场景:
1.正常状态下手指没有触碰屏幕时;
2.屏幕下拉,显示松开刷新时;
3.手指松开为刷新状态时;
1.首先未触碰手机屏幕时,我们以红色框代表手机屏幕,显示时的布局为:
那么是怎么使边距刚好只显示mRefreshView且与mRefreshView的上边距对齐的呢?
只要知道mHeadLayout的高度就可以,然后通过设置整个布局的padding即可;
下面我简单解释一下padding
如果一个布局的paddingTop设置为大于0的值,那么:
如果一个布局的paddingTop设置为等于0的值,那么:
如果一个布局的paddingTop设置为小于0,那么:
所以只要知道mHeadLayout的高度mHeadHeight和mFooterLayout的高度mFootHeight,在设置上下边距的时候,设置上边距为-mHeadHeight,下边距为mFootHeight即可,
且此处的mHeadLayout的高度是一个相对较大的定值,所以整个mHeadLayout中底部是一个LoadingLayout,结构图如下:
mHeadHeight是框架给我设定的一个较大的值;
2,接下来说一下,随着手指在屏幕上下拉的时候,实际做了哪些操作?
既然是一个LinearLayout,且整体布局大小是大于屏幕大小,那么手指下拉的过程,就是整个linearlayout布局向下滚动的过程;
随之手指滚动的距离,scrollto相应的距离;
其中需要关注的代码无非就是onItercepterEvent来解决和内部listview的滑动冲突
另一个是OnTouchEvent随着手指滑动,整个LinearLayout的滚动;
向下滚动的过程中,mHeadLayout逐渐显示出来,被看见;
3.松开后刷新界面又是如何实现的,松开后,整个布局又回到了一开始的状态,
即只显示mRefreshableView,那么为什么还会显示一个刷新按钮呢,就是因为,和第一个状态下不同的是,listview内部的headview显示出来了,而这个headview也是一个loadingLayout,且整体样式和mHeaderLayout中的loadingLayout一致;且刷新完成后,listview中的headview又被隐藏起来了,回复到第一种状态;
所以看似复杂的PullToRefreshListView,其实只有两个状态;
1.整个布局随着手指滑动而向下滚动
2.整个布局中的mRefreshableView和屏幕相切,显示listview内部的headview即为刷新状态,不显示时即为常态
- PullToRefreshListView实现下拉刷新
- PullToRefreshListView简单实现下拉刷新、下拉加载
- PullToRefreshListView下拉刷新
- Android中PullToRefreshListView的下拉刷新,下拉加载的实现
- 使用AsyncTask 实现网络请求及PullToRefreshListView下拉刷新
- 利用第三方开源框架 PullToRefreshListView 实现下拉刷新
- PullToRefreshListView实现下拉刷新和上拉加载更多
- PullToRefreshListView上拉刷新和下拉刷新
- PullToRefreshListView上拉加载,下拉刷新 刷新网络数据 简单实现ListView显示网络数据
- android下拉刷新之PullToRefreshListView(一)
- android下拉刷新之PullToRefreshListView(二)
- PullToRefreshListView下拉刷新与上拉加载
- PullToRefreshListView进阶(一)----->下拉刷新
- PullToRefreshListView 下拉刷新谈不会的bug
- PullToRefreshListView 下拉刷新上拉加载
- SwipeRefreshLayout 嵌套PullToRefreshListView下拉刷新冲突解决
- 下拉刷新ListView讲解,自定义PullToRefreshListView
- PullToRefreshListView上拉加载更多,下拉刷新
- 二叉树已知(中序+一序)求另一序
- android 水准仪的实现(方向传感器的使用)
- Android-TextView设置多种颜色及部分点击事件
- 理解js设计模式之代理模式
- Eureka常见问题
- PullToRefreshListView实现下拉刷新
- 在window上搭建服务器(tomcat、mysql、eclipse)
- Java 解惑:Comparable 和 Comparator 的区别
- AT指令获取基站信息
- jdbc连接MYSQL数据库
- 实践
- HDU 4547 CD操作 LCA
- Linux开发环境搭建04---Ubuntu14.04中基本开发环境配置
- bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)