1,自定義下拉刷新-添加頭佈局網絡
參考ui異步
1.1,下拉刷新其實是一個View,添加到ListView頭佈局上的控件佈局
建立對應的佈局文件動畫
1.2,建立一個自定義控件PullToRefreshListViewui
建立方法initHeaderView()//初始化頭佈局控件spa
注意:頭佈局的添加順序:先添加的在上面線程
1.3,隱藏頭佈局3d
設置頭佈局的padding爲自身的(-高度)blog
獲取高度的時候,記得先手動測量一下接口
1.4,拉出頭佈局
重寫觸摸事件,記錄按下的位置(downX),和移動的位置,二者相減
可是這裏要注意,ViewPager頭條新聞可能會消費掉按下的位置,致使按下的位置(downX)沒有賦值,因此在移動的事件判斷中(要給downX從新賦值)
下拉的時候,判斷若是是一個條目,或移動的值爲正數才能拉出頭佈局
而後動態的修改padding(移動的值 - 高度);
1.5 頭佈局狀態切換
定義一個枚舉表示這三個狀態
下拉刷新:
默認狀態,當padding 小於0的時候顯示,而且當前不處於正在刷新
鬆開刷新
當padding大於0,而且上一個狀態處於下拉刷新進入
正在刷新
鬆開事件中,若是處於鬆開刷新時進入.
定義一個方法,當狀態發生改變的時候調用
觀察可知,狀態文字,時間,箭頭髮生了改變
箭頭動畫由↓逆時針180度↑,記得保持最後的狀態
當鬆手以後,若是爲刷新狀態:修改頭佈局padding爲0,完整展現,顯示進度條,隱藏箭頭(記得把動畫清理掉,不然不能隱藏)不然隱藏頭佈局
細節:若是處於正在刷新,再次拖拽的時候不該該進入判斷,break跳出循環
1.6 接口回調
哪裏須要通知調用者,就在哪裏進行調用接口方法
要提供一個方法給外界設置回調監聽器
調用者在回調的方法裏再次訪問網絡解析數據
自定義控件中提供一個方法,讓調用者調用
同時調用自定義控件的方法,告訴自定義控件刷新結束了(網絡請求失敗的時候也要調用一下)
1.7 時間更新
建立一個設置時間的方法,讓調用者調用(不在自定義控件中更新,是由於網絡請求可能失敗,失敗的話,是不須要更新時間的,)
固然,也能夠寫在刷新的方法裏,傳遞一個參數進來,判斷是否成功請求網絡
MM月 若是是小寫 就是從0開始的
HH 小時 24進制,hh 12進制
初次顯示的時間,能夠按需求來,是否須要保存在本地(只顯示成功請求的時間之類的)
1.8 Xutils細節補充
①Xutils訪問網絡不須要建立子線程,由於它底層用的是AsyncTask
②Xutils的回調方法裏能夠更新ui,由於回調方法其實是在handler裏進行的,已經在主線程中運行了.就不用擔憂更新ui的問題.底層是異步的