編輯:關於Android編程
前幾篇文章講過listview的自定義下拉刷新上拉加載,最近一直考慮再來個RecyclerView的下拉刷新和上拉加載,畢竟RecyclerView使用的越來越多了,扒了扒網上有關RecyclerView下拉刷新上拉加載的也有很多,不過大多數都滿足不了像listview上的那種刷新效果!為此,博主也是煞費苦心地思考了兩天,到底該怎樣做,才能讓RecyclerView的下拉刷新上拉加載像listview一樣666呢?
我們知道,listview自帶有addHeaderView和addFooterView,很隨意的添加頭尾布局,而且在重寫listview時監聽本身即可,但遺憾的是,RecyclerView並不像listview那樣方便的添加頭尾布局,所以問題就來了,想實現RecyclerView的下拉刷新和上拉加載必然要解決的一件事就是,如何隨意的給RecyclerView添加頭尾布局?
有的同學可能會說,RecyclerView通過適配器中的viewType添加header和footer不是很好辦的事情嗎?是的,拋開刷新不說,RecyclerView添加頭尾布局確實方便,但這個違背了自定義View的初衷,我們要的是像listview一樣重寫RecyclerView,而不需要任何其它條件,拿來即用,所以這個方法不可行!那還有什麼方法呢,博主思來想去,也就通過重寫線性布局LinearLayout,來順序添加headerview,RecyclerView,footerview最適合不過了,然後監聽LinearLayout的觸摸事件可達到效果!
好了,思路確定後,開始實現吧!
*重寫LinearLayout,並在構造方法中,inflate出headerview,RecyclerView,footerview,並依次添加!(步驟跟前幾篇的listview刷新相似);
*監聽觸摸事件,結合上幾篇listview的處理方法,監聽OnTouch,不過悲催的是,博主忘記了一點,現在重寫的是LinearLayout即一個ViewGroup,RecyclerView只是LinearLayout的一個子View,下拉時的效果還湊合,但是不松手再上滑時就悲催了,因為RecyclerView跟headerview和footerview並不像listview那樣是一體的,所以效果可想而知了,因此只監聽onTouch當然是不行的!
好吧,那現在我們還得把一把事件分發機制了。。。(事件分發機制,博主也不會細講,因為博主在迷迷糊糊的呢。萬一講錯了,你們削我咋弄?),上一張觸摸事件傳遞圖吧:
對事件分發機制有點經驗的應該很容易看懂了,結合我們的項目,那麼在觸摸RecyclerView的事件傳遞就是:
觸摸RecyclerView:
->LinearLayout的dispatchTouchEvent
->LinearLayout的onInterceptTouchEvent
->RecyclerView的dispatchTouchEvent
->RecyclerView的onTouchEvent
->LinearLayout的onTouchEvent
關於事件分發機制不懂得同學可以自行百度了,注意一點,最小View是沒有onInterceptTouchEvent攔截事件的!
好了,事件分發弄通了,往下進行呗!但俗話說的好,不要重復發明輪子,呵呵,所以博主也參考了開源的pulltorefresh中的部分代碼(當然,大家在使用輪子的時候一定要搞懂原理,達到舉一反三地效果,切不可奉行糊裡糊塗的拿來主義),結合本項目中的RecyclerView完成了像listview那般的下拉刷新和上拉加載!
看下實現效果吧:
布局代碼:
實現代碼:
recyclerView = (PullRecyclerView) findViewById(R.id.recyclerView);
recyclerView.setOnHeaderRefreshListener(this);
recyclerView.setOnFooterRefreshListener(this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
myAdapter = new MyAdapter();
recyclerView.setAdapter(myAdapter);
本例中沒有設置禁止下拉上拉的方法,大家可根據需要自行設置一個方法,在觸摸事件中判斷即可!當item數量不滿一屏時可以禁止上拉加載!
在編寫自定義滑動控件時常常會用到Android觸摸機制和Scroller及VelocityTracker。Android Touch系統簡介(二):實例詳解onInte
記錄一下微信第三方實現登錄的方法。還是比較簡單。一、必要的准備工作1.首先需要注冊並被審核通過的微信開放平台帳號,然後創建一個移動應用,也需要被審核;2.然後到資源中心下
Android應用框架層和硬件抽象層以及底層之間的關系1. JNI技術:(1).JNI技術簡單的說就是在本地Java語言聲明本地方法和加載動態鏈接庫(.so文件)(2).
前言Runtime是一套比較底層的純C語言API,包含了很多底層的C語言API。在我們平時編寫的OC代碼中,程序運行時,其實最終都是轉成了Runtime的C語言代碼。Ru