通用的几种方式
- viewHolder复用机制
- 图片异步加载、缓存、压缩(使用glide等解决,最好后台反2套:缩略图和原图)
- 根据滑动状态处理加载情况
这里就主要处理:1.如果在滑动的过程中且没没被加载过,那么就不加载2.(加载)2.1在滑动的过程中且加载过2.2不在滑动中
主要是监听列表滚动,把状态传入adapter中,然后设置图片bean的是否加载过状态,然后根据图片状态和滑动状态确定是否加载
- 滑动状态
recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if(newState==RecyclerView.SCROLL_STATE_IDLE||newState==RecyclerView.SCROLL_STATE_DRAGGING){
//show 手指拖拽和停止均可展示图片
adapter.setScrolling(false);
//通知adapter恢复getview中的图下载
if(Glide.with(mActivity).isPaused())Glide.with(mActivity).resumeRequests();
}else {
//hide
adapter.setScrolling(true);
}
}
- adapter中判断
if(isScrolling&&!image.isLoaded()){
Glide.with(context).pauseRequests();
}else {
Glide.with(context).resumeRequests();
}
Glide.with(context)
.load(path)
.apply(options)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
image.setLoaded(true);
return false;
}
})
.into(contentHolder.iv_picture);