抓根宝

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1,自定义下拉刷新-添加头布局

参考ui

 

1.1,下拉刷新实际上是一个View,添加到ListView头布局上的控件

  创建对应的布局文件

1.2,创建一个自定义控件PullToRefreshListView

创建方法initHeaderView()//初始化头布局控件

注意:头布局的添加顺序:先添加的在上面

1.3,隐藏头布局

设置头布局的padding为自身的(-高度)

获取高度的时候,记得先手动测量一下

1.4,拉出头布局

 

 

重写触摸事件,记录按下的位置(downX),和移动的位置,两者相减

但是这里要注意,ViewPager头条新闻可能会消费掉按下的位置,导致按下的位置(downX)没有赋值,所以在移动的事件判断中(要给downX重新赋值)

 

下拉的时候,判断如果是一个条目,或移动的值为正数才能拉出头布局

 

然后动态的修改padding(移动的值 - 高度);

 

1.5 头布局状态切换

定义一个枚举表示这三个状态

下拉刷新:

默认状态,padding 小于0的时候显示,并且当前不处于正在刷新

松开刷新

padding大于0,并且上一个状态处于下拉刷新进入

正在刷新

松开事件中,如果处于松开刷新时进入.

 

定义一个方法,当状态发生改变的时候调用

观察可知,状态文字,时间,箭头发生了改变

箭头动画由↓逆时针180度↑,记得保持最后的状态

 

当松手之后,如果为刷新状态:修改头布局padding0,完整展示,显示进度条,隐藏箭头(记得把动画清理掉,否则不能隐藏)否则隐藏头布局

 

细节:如果处于正在刷新,再次拖拽的时候不应该进入判断,break跳出循环

 

1.6 接口回调

哪里需要通知调用者,就在哪里进行调用接口方法

要提供一个方法给外界设置回调监听器

 

调用者在回调的方法里再次访问网络解析数据

 

自定义控件中提供一个方法,让调用者调用

同时调用自定义控件的方法,告诉自定义控件刷新结束了(网络请求失败的时候也要调用一下)

 

1.7 时间更新

创建一个设置时间的方法,让调用者调用(不在自定义控件中更新,是因为网络请求可能失败,失败的话,是不需要更新时间的,)

当然,也可以写在刷新的方法里,传递一个参数进来,判断是否成功请求网络

MM月 如果是小写 就是从0开始的

HH 小时 24进制,hh 12进制

 

初次显示的时间,可以按需求来,是否需要保存在本地(只显示成功请求的时间之类的)

 

1.8 Xutils细节补充

Xutils访问网络不需要创建子线程,因为它底层用的是AsyncTask

Xutils的回调方法里可以更新ui,因为回调方法实际上是在handler里进行的,已经在主线程中运行了.就不用担心更新ui的问题.底层是异步的

 

posted on 2016-07-13 20:28  抓根宝  阅读(178)  评论(0编辑  收藏  举报