Android下拉刷新实现原理
来源:互联网 发布:南京大学cssci数据库 编辑:程序博客网 时间:2024/06/05 11:01
Android下拉刷新实现原理
分析:
一、设置自定义的布局:
创建自定义类
①继承ListView
②实现OnScrollListener
③实现相应的方法,进行重写
1、下拉刷新的控件有四种状态
*下拉刷新、松开刷新、正在刷新、刷新完成
*每次状态改变的时候,要记录下来,使用state
*从松开刷新到下拉刷新的状态记录下来:isBack
2、初始化控件:
当界面初始化的时候,即调用构造函数的时候,要对控件进行初始化(init)
*将下拉刷新控件和listView结合{View.inflate方法,加载布局}
*获取到控件上的view[箭头、进度条、标题、更新时间]
*对控件进行测量:宽高等,创建方法,测量出控件的宽高,没有,赋予默认值【宽:填充父元素;宽:包裹内容】
创建measureView方法,获取控件的宽高,可以通过ViewGroup.getChildMeasureSpec获取。测量后要保存宽高
*将headView 与listView 绑定,即将控件加到listView的头部
*初始化箭头顺时针和逆时针的动画
Tips:
每个控件想显示出来,需要通过onDraw方法,在此方法之前,需要通过测量
即先执行onMeasure方法,在执行onDraw方法,才能将控件显示出来
所以需要指定下拉控件的大小,需要测量出来其大小,需要创建类似于onMeasure方法
3、触摸事件处理:
只有当最顶端的条目为最开始的条目(即初始化时第一个显示的条目),下拉的时候才应该显示下拉刷新的控件
①、按下状态
判断顶部显示的条目是否为初始的第一个,且是否记录过滑动起始点
对开始滑动点的坐标进行赋值,并设置记录的状态为true
②、移动状态
*移动时需要随时记录当前的位置
*同样需要判断是否需要记录滑动起始点的坐标(同按下状态的情形)
*当处理正在刷新时候, 不能够滑动,所以需要处理未刷新的状态{下拉刷新、松开刷新、刷新完成的情形}
@下拉刷新时:
向上推:手指移动时处于此状态,那么当手指移动距离小于0时,状态应该是刷新完成,所以,应该将状态改为刷新完成
向下拉:手指滑动距离与下拉刷新控件之比大于控件的高度时,说明要向下拉动,将状态改为松开刷新
@松开刷新时:
当手指滑动距离与下拉刷新控件之比大于控件的高度,且手指滑动了,将状态改为下拉刷新
@刷新完成时:
手指向下移动了,即要下拉刷新了
设置headView 显示位置{各种状态处理完成后}
③、松开状态
状态为下拉刷新的时候,说明此时是要进行“刷新完成”的操作了,状态需要改为刷新完成(DONE)
状态为松开啥徐的时候,说明此时是要进行“正在刷新”的操作了,状态需要改为正在刷新(REFRESHING)
进行正在刷新的时候,需要将数据进行同步刷新显示在界面上
在触摸事件完成的时候,需要进行重新绘制界面:invalidate();
触摸事件的返回值需要为true:即不需要将事件继续传递下去,再次出销毁掉
4、headView状态处理
对下拉刷新控件的四种状态进行相应的处理:
①、下拉刷新状态:
*显示箭头、标题、更新时间,进度条不显示
*需要清除箭头上次的动画,并在从松开刷新回到的下拉刷新的时候设置箭头的动画(向上)
②、松开刷新的状态:
*显示箭头、标题、更新时间,进度条不显示
*清除箭头上次的动画,并设置新的动画(向上)
③、刷新的状态:
*显示进度条、标题、更新时间,箭头不显示
*设置刷新控件为显示出来
④、刷新完成的状态:
*显示箭头、标题、更新时间,进度条不显示
*设置刷新控件为不显示
5、刷新数据
创建刷新的方法
6、创建刷新监听器
创建刷新监听器的接口,在其中创建抽象方法
7、创建回调方法
记录监听对象,赋值给刷新监听
8、创建刷新后的方法
在刷新后:改变刷新控件的状态、headView 状态更新、设置其中的文本
9、重写设置适配器的方法
设置适配器后,需要设置更新时间
二、Activity中显示效果和数据
1、初始化数据:
创建initData方法,初始化数据
2、找到布局文件中自定义的控件
*设置控件(listview)的适配器
复写其中相应的方法,进行填充布局
*设置控件(listview)的刷新监听器
刷新时,从服务器中获取数据,并更新适配器,对刷新控件进行相应的更新
使用AsyncTask中进行刷新,向服务器请求数据,完成耗时操作
Tips:
只要涉及比较的地方,都需要进行状态的处理,即将相应的状态赋值给当前的状态
设置刷新控件不显示,只需将其高度改为负值即可
- Android下拉刷新实现原理
- Android下拉刷新实现
- interview - 下拉刷新实现原理
- Android ListView下拉/上拉刷新:设计原理与实现
- Android ListView下拉/上拉刷新:设计原理与实现
- Android ListView下拉/上拉刷新:设计原理与实现
- Android ListView下拉/上拉刷新:设计原理与实现
- Android中实现下拉刷新
- Android中实现下拉刷新 .
- Android中实现下拉刷新
- Android中实现下拉刷新
- Android中实现下拉刷新
- Android中实现下拉刷新
- Android中实现下拉刷新
- Android中实现下拉刷新 .
- android 下拉刷新 快速实现
- Android 下拉刷新框架实现
- Android 下拉刷新框架实现
- 【剑指Offer】二叉搜索树与双向链表
- 最近忙得实在是不行
- 基于VSM的命名实体识别、歧义消解和指代消解
- Binary Search Tree 二叉查找树
- Eclipse快捷键大全
- Android下拉刷新实现原理
- git & repo 命令
- Qt文件操作之——QFileDialog保存文件
- Discuz!$_G变量的使用方法
- xml之sax解析
- I/O随笔
- 快数据与大数据的结合(VoltDB + Hadoop)
- Raising Bacteria (Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] )
- lintcode做题总结, Sept 16