RecycleViewScrollHelper--RecyclerView滑動事件檢測的輔助類


目錄

概述

這是一個關於RecycleView滑動事件的輔助類,該輔助類可以檢測RecycleView滑動到頂部或者底部的狀態.
可用於實現RecycleView加載更多或者刷新(雖然刷新可以直接用SwipeRefreshLayout).也可用於某些滑動相關的需求,如FloatingActionButton的隱藏與顯示之類的.


關於RecycleView的滑動監聽

RecycleView本身已經提供了滑動的監聽接口,OnScrollListener,這個接口包含了以下的方法.

//當recycleView的滑動狀態改變時回調 public void onScrollStateChanged(RecyclerView recyclerView, int newState){} //當RecycleView滑動之后被回調 public void onScrolled(RecyclerView recyclerView,int dx, int dy){}

由以上狀態我們可以根據不同的狀態去判斷RecycleView當前的位置或者是滾動狀態.


關於滑動位置的監聽

我們需要確定的是RecycleView是否已經滑動到底部或者是頂部.
由以上提及的狀態我們可以確定,當前RecycleView滑動到頂部或者底部時,其滾動狀態都是靜止的,這時狀態應該是SCROLL_STATE_IDLE.
確定了狀態,下面需要確定的就是當前的item是否為頂部或者是底部的item?
關於這個問題,其實RecycleView已經有相關的方法可以查詢到了(嚴格來說應該是RecycleViewLayoutManager),網上已經有很多相關的博客說明.這里也是參考了一下一些博客,這里給出一個地址,可以了解一下,下面也會提及如何檢測,如果覺得鏈接內容太多可以跳過.
參考鏈接

特別說明,為了避免混亂
1.這里使用itemView表示adapter里每一個position對應的view;
2.position都是指adapter中的數據的位置
3.使用childView表示RecycleView緩存復用的子view


檢測邊界的itemView

關於itemView的位置確定,可以通過LinearLayoutManager獲取到當前顯示的view對應adapter中的position.

LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;
//查找最后一個可見的item的position int lastItemPosition = linearManager.findLastVisibleItemPosition(); //查找第一個可見的item的position int firstItemPosition =linearManager.findFirstVisibleItemPosition();

以上是簡單的頂部/底部判斷方式.


簡單判斷方式的缺點

以上已經介紹了如何判斷RecycleView滑動到頂部和底部的方式.但這個判斷方式是有缺陷的.問題在於RecycleView的可見itemView的查找上.

itemView的可見問題

RecycleView中的itemView是可大可小的,這個取決於我們的實際使用場景及業務.當itemView的內容比較多時,將會占據相當一部分RecycleView的界面.所以我們往往存在這種情況:
某些itemView會在滑動過程中只顯示一部分或者一半
但是這種情況下,該itemView還是屬於一個可見(visible).

任何時候一個itemView只要有任何一部分顯示在RecycleView上時,該itemView都是可見的

回到我們之前查找邊界itemView的方法中,查找邊界用的方法是:

linearLayoutManager.findFirstVisibleItemPosition(

示例:當設置容差值為item的一半高度時,則在頂部或者底部item超過一半滑出界面時即可以觸發回調事件.


完整地檢測滿屏並滑動到底部(或者頂部)

將以上兩個檢測滿屏檢測滑動到底部的方法組合起來即可.
最后附上更加具體的檢測方式:

  • 可以設置先檢測滑動到底部還是頂部
  • 可以設置在先檢測到某一種情況時是否還繼續檢測另一種情況(栽些情況下可能需要同時檢測是否滑動到頂部及底部)
  • 可以設置是否檢測滿屏的情況(非滿屏情況下不觸發滑動事件)
  • 可以設置檢測滑動到頂部/底部的容差值(即擴大檢測范圍)

GitHub地址

有幫助的話歡迎Start,謝謝
https://github.com/CrazyTaro/RecycleViewAdatper

資源下載

不想下載github項目的,或者不使用AS只需要類文件的,可以到以下下載地址直接下載類文件:
建議直接到github上下載文件,盡管這部分的文件功能很明確也很穩定,但如果項目有任何更新的情況下,肯定會提交到github上的.
http://download.csdn.net/detail/u011374875/9556686

回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM