談談安卓中的下拉刷新,上拉加載ListView的實現

bags3563 8年前發布 | 11K 次閱讀 Android開發 移動開發

來自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2014/0729/1636.html


   下拉刷新本是ios上的效果,后來在android中也大量采用,但是我一直沒有找到一個在性能和效果上都可以比肩ios的那種控件,有些控件效果不錯但是滑動不流暢,有些很流暢但是效果突兀,比如oschina的客戶端,后來看了看oschina的下拉刷新代碼,覺得他這個可以自己修改一下,自己動手修改之后才發現,一個小小的下拉刷新,上拉加載其實有很多細節難以處理,直到現在我都還沒有把oschina的控件改完美(我說的完美是美觀、自然、流暢并且api簡單,其實oschina的代碼寫的很亂),我的最終目的是要得到這樣一個listview:

1.下拉的時候有一定的阻尼效果

   oschina的下拉在這點上做的最差,輕輕一拉就跑了飛遠。

2.手指不松開來回的下拉滑動速度不變,位移相同的情況下,和狀態有關的圖標與文字指示都是一一致的。

   其中“位移相同的情況下,和狀態有關的圖標與文字指示都是一一致的”這一點很容易做到,但是“手指不松開來回的下拉滑動速度不變”這點不容易做到,因為一般來說下拉刷新的原理都是通過添加一個listview的headerview實現的,當headerview出現的時候,來回移動會跟listview本身的scroll滾動沖突,假如第一次下拉有阻尼效果,按住不松開,回到頂部,再次下拉的時候這個阻尼效果消失了(注意這個過程始終沒有松開)。這是絕大多數下拉刷新控件都具有的問題。

3.listview頭部提示部分的高度變化是漸進的,平滑的

   很多下拉刷新控件在松開的時候一下子就跳到了刷新狀態,當刷新完成一下子又跳到了沒有頭部的狀態,這讓人感覺非常不爽。

4.下拉刷新的api應該盡可能簡單,使用起來最好和ListView本身差別不大,用戶不需要非常小心就能完美實現。

   oschina的下拉刷新控件中headerview 和 footerview的布局都需要用戶自己去定義,使用起來很麻煩。

5.雖然實現了下拉刷新,但是這個功能不應該影響到listview本身的滑動性能。

   記得又一個被大量使用的下拉刷新控件,忘了名字了,使用之后能明顯感覺到listview的性能下降很多,但是因為UI做的好加上還有很多其他的花哨功能,被很多app采用。

   雖然我多次提到oschina在下拉刷新的處理上的不足,但是他給我們提供了實現下拉刷新listview的基本原理:重寫onTouchEvent 根據手勢位移改變listview的headerview。

   在oschina的listview的基礎上我基本做到了1、3、4、5點但是第二點還做不到,也沒想好解決辦法。

   但是在網上我找到一個解決了上述5點絕大多數問題的第三方控件,XListView

   現在我都不知道是繼續去修補那個oschina的控件還是直接采用XListView了。。。

XListView的git地址:

https://github.com/Maxwin-z/XListView-Android/tree/master/src

效果截圖:


 本文由用戶 bags3563 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!