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:

       只要涉及比较的地方,都需要进行状态的处理,即将相应的状态赋值给当前的状态

       设置刷新控件不显示,只需将其高度改为负值即可

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鲜切花 较小的花苞怎么办 大棚玫瑰苗水大涝的不长怎么办 鲜花买回来蔫了怎么办 喝玫瑰醋上火了怎么办 插在花泥上的花怎么办 插的花蔫了怎么办 紫睡莲的茎软了怎么办 家养的荷花烂叶怎么办 家养的荷花叶老是枯萎怎么办 新买的绣球蔫了怎么办 绣球花被太阳晒阉了怎么办 羊肉香精放多了怎么办 被飞机防腐剂弄到皮肤怎么办 狗吃了脱氧保鲜剂呕吐怎么办 小孩误吃试纸了保鲜剂怎么办 狗狗把保鲜剂吃了怎么办 小孩吃了防潮珠怎么办 狗吃了防潮剂怎么办 洋桔梗有点烂根怎么办 变色球花枯萎了怎么办 桔梗花叶子蔫了怎么办 洋桔梗头垂下来怎么办 洋桔梗花容易折断怎么办 眼睛被火炮炸伤了怎么办 逆水寒包裹满了怎么办 逆水寒包裹里满了怎么办 grim soul包裹满了怎么办 剑三包裹满了怎么办 电脑开机后都是英文怎么办 欠员工工资仲裁老板不到庭怎么办 乔丹拖鞋鞋底硬怎么办 公牛插座电阻烧了怎么办 公牛led灯太刺眼怎么办 公牛插座usb坏了怎么办 墙壁上开关坏了怎么办 刑事二审判决后不服的怎么办 空调外机空间小怎么办 离婚判决生效书丢了怎么办 法院判决离婚对方上诉怎么办 法院判决离婚上诉中级法院怎么办 刑诉中二审发现一审事实错误怎么办