獲取RecyclerView滑動的距離。
前面我們已經用RecyclerView顯示一些數據
。
本文演示如何獲取RecyclerView的滑動距離。
要實現這個功能,需要給RecyclerView添加滑動時監聽RecyclerView.OnScrollListener
。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
Log.d(TAG, "onScrolled: dy: " + dy);
}
});
RecyclerView.OnScrollListener
是一個抽象類,我們可以選擇性地實現它的方法。
onScrolled
方法的dy
表示的是每一次y方向上的相對滑動距離。向下滑動是正數,向上滑動是負數。
可以添加一個變量來累計滑動的距離。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
int mmRvScrollY = 0; // 列表滑動距離
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
mmRvScrollY += dy;
Log.d(TAG, "onScrolled: mmRvScrollY: " + mmRvScrollY + ", dy: " + dy);
}
});
每次滑動都累加到mmRvScrollY
中。
打印log
onScrolled: mmRvScrollY: 3167, dy: 3
onScrolled: mmRvScrollY: 3169, dy: 2
onScrolled: mmRvScrollY: 3167, dy: -2
onScrolled: mmRvScrollY: 3155, dy: -12
建議同時給adapter加個registerAdapterDataObserver
,監聽插入/刪除/移動,自己加減前面記錄的dy滾動值。