RecyclerView在快速滑动的时候不加载图片,缓慢滑动恢复

2018-03-29  本文已影响0人  周大侠侠侠侠侠侠侠侠侠侠侠侠侠

一开始我对这个有点懵怎么判断是不是快速滑动,在网上找了很久,别人的博客里面都是滑动的时候停止加载图片,静止的时候开始加载图片,可是这不是我要的效果啊,缓慢滑动或者缓慢惯性滑动的时候我也要加载图片的呀。

@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();
            }
        });

有什么其他的方法,请在评论出指出,给与我帮助

上一篇 下一篇

猜你喜欢

热点阅读