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

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

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

}

});

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中使用 RecyclerView 加载图片,可以使用 Glide 库进行图片加载,同可以通过以下几种方式进行滑动图片加载的优化: 1. 设置缓存策略:通过设置 Glide 的缓存策略,可以减少图片加载的网络请求,提高加载速度。可以使用如下代码设置缓存策略: ``` RequestOptions requestOptions = new RequestOptions() .diskCacheStrategy(DiskCacheStrategy.ALL) .skipMemoryCache(false); Glide.with(context) .setDefaultRequestOptions(requestOptions) .load(url) .into(imageView); ``` 上述代码中,`diskCacheStrategy(DiskCacheStrategy.ALL)` 表示将图片缓存在磁盘中,`skipMemoryCache(false)` 表示不跳过内存缓存。 2. 设置占位符和错误图片:通过设置占位符和错误图片,可以在图片加载失败或者未加载完成,显示一张默认的图片,避免出现空白的情况,同也可以提高用户体验。可以使用如下代码设置占位符和错误图片: ``` RequestOptions requestOptions = new RequestOptions() .placeholder(R.drawable.placeholder) .error(R.drawable.error) .diskCacheStrategy(DiskCacheStrategy.ALL) .skipMemoryCache(false); Glide.with(context) .setDefaultRequestOptions(requestOptions) .load(url) .into(imageView); ``` 上述代码中,`placeholder(R.drawable.placeholder)` 表示在图片加载之前显示的占位符图片,`error(R.drawable.error)` 表示图片加载失败显示的错误图片。 3. 取消加载任务:在 RecyclerView 滑动,可能会存在用户滑动过快,导致部分图片加载完成,此需要在滑动停止,及取消未完成的加载任务,避免加载任务过多,影响性能。可以使用如下代码取消加载任务: ``` @Override public void onViewDetachedFromWindow(@NonNull ViewHolder holder) { super.onViewDetachedFromWindow(holder); Glide.with(context).clear(holder.imageView); } ``` 上述代码中,`onViewDetachedFromWindow` 方法表示视图从窗口中移除会被调用,通过 `Glide.with(context).clear(holder.imageView)` 取消当前视图中的加载任务。 通过上述优化方式,可以提高 RecyclerView 加载图片的性能和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值