先看效果圖:
滑動監(jiān)聽.gif
//設置RecyclerView滑動監(jiān)聽器 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處于不可見狀態(tài) 說明列表沒有滑動到頂部 顯示回到頂部按鈕
int firstVisibleItemPosition = manager.findFirstVisibleItemPosition();
// 當不滾動時
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
// 判斷是否滾動超過一屏
if (firstVisibleItemPosition == 0) {
ivTop.setVisibility(View.GONE);
} else {
//顯示回到頂部按鈕
ivTop.setVisibility(View.VISIBLE);
}
//獲取RecyclerView滑動時候的狀態(tài)
} else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {//拖動中
ivTop.setVisibility(View.GONE);
}
}
});
RecyclerView有三個滑動狀態(tài):
- 當前的recycleView不滑動(滑動已經(jīng)停止時)
public static final int SCROLL_STATE_IDLE = 0;
- 當前的recycleView被拖動滑動
public static final int SCROLL_STATE_DRAGGING = 1;
- 當前的recycleView在滾動到某個位置的動畫過程,但沒有被觸摸滾動.調(diào)用 scrollToPosition(int) 應該會觸發(fā)這個狀態(tài)
public static final int SCROLL_STATE_SETTLING = 2;