RecyclerView手勢滑動監聽實現快速回到頂部功能
先看效果圖:

滑動監聽.gif
//設定RecyclerView滑動監聽器 addOnScrollListener(),其中setOnScrollListener()方法已過時 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); //獲得recyclerView的線性佈局管理器 LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager(); //獲取到第一個item的顯示的下標不等於0表示第一個item處於不可見狀態 說明列表沒有滑動到頂部 顯示回到頂部按鈕 int firstVisibleItemPosition = manager.findFirstVisibleItemPosition(); // 當不滾動時 if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 判斷是否滾動超過一屏 if (firstVisibleItemPosition == 0) { ivTop.setVisibility(View.GONE); } else { //顯示回到頂部按鈕 ivTop.setVisibility(View.VISIBLE); } //獲取RecyclerView滑動時候的狀態 } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {//拖動中 ivTop.setVisibility(View.GONE); } } });
RecyclerView有三個滑動狀態:
-
當前的recycleView不滑動(滑動已經停止時)
public static final int SCROLL_STATE_IDLE = 0;
-
當前的recycleView被拖動滑動
public static final int SCROLL_STATE_DRAGGING = 1;
-
當前的recycleView在滾動到某個位置的動畫過程,但沒有被觸控滾動.呼叫 scrollToPosition(int) 應該會觸發這個狀態
public static final int SCROLL_STATE_SETTLING = 2;