一开始我对这个有点懵怎么判断是不是快速滑动,在网上找了很久,别人的博客里面都是滑动的时候停止加载图片,静止的时候开始加载图片,可是这不是我要的效果啊,缓慢滑动或者缓慢惯性滑动的时候我也要加载图片的呀。
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//dx为RecyclerView沿着X轴(横向)滑动时偏移量.
//正数为正向滑动(向右)偏移量,负数为反向滑动(向左)偏移量
//dy为RecyclerView沿着y轴(纵向)滑动时偏移量.
//正数为正向滑动(向下)偏移量,负数为反向滑动(向上)偏移量
}
既然是这样,那我就简单判断一下这个dx和dy此刻的偏移量是多少不久好了,于是
注:150这个数据基本上滑动浏览界面是基本不会超过的,偶尔超过页面马上降落数值,只有用力滑动才会出现
但是出现问题了,但我在快速滑倒最下方的时候或者最上方的时候,比如突然到顶部或者突然到底部,这个时候就会停止滑动,并且dy保持之前的数值。所以这里的话还要判断是不是已经滑动停止
override fun onScrolled(dx: Int, dy: Int) {
LogUtils.iTag("scroll", dy)
//判断是否超出限制
if (abs(dy) < limit) {
listener?.onScrollSlow()
} else {
listener?.onScrollFast()
}
super.onScrolled(dx, dy)
}
override fun onScrollStateChanged(state: Int) {
super.onScrollStateChanged(state)
//快速滑动突然停止 dy仍然会保留之前数值 所以还需要判断是否停止滑动
if (state == SCROLL_STATE_IDLE) {
listener?.onScrollSlow()
}
}
这样在配合上Glide的加载与暂停就完成了
mRvList.setOnScrollFastListener(new FeedRootRecyclerView.ScrollFastListener() {
@Override
public void scrollFast() {
Glide.with(mContext).pauseRequests();
}
@Override
public void scrollSlow() {
Glide.with(mContext).resumeRequests();
}
});
有什么其他的方法,请在评论出指出,给与我帮助