RecyclerView手勢滑動監聽實現快速回到頂部功能

github示例源碼/附圖git

//設置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有三個滑動狀態:github

  • 當前的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;
相關文章
相關標籤/搜索