//設置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;