优化大量图片加载recyclerview列表的滑动效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/stimgo/article/details/86607278

通用的几种方式

  1. viewHolder复用机制
  2. 图片异步加载、缓存、压缩(使用glide等解决,最好后台反2套:缩略图和原图)
  3. 根据滑动状态处理加载情况

这里就主要处理: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);

猜你喜欢

转载自blog.csdn.net/stimgo/article/details/86607278