Glide加载图片完成的回调

860 阅读1分钟

用于加载完成图片后进行的整理操作,比如在listview中或者RecycleView中使用Glide加载完图片后图片不能自己显示完全,要手动上划才能显示完全,这是因为图片加载是异步的,在图片渲染完成之前已经更新了adapter,所以listview在重新绘制的时候并没有把图片的高度算进去,因为这个时候很可能图片还没有渲染出来。可以考虑用回调接口的方式,在图片加载完成后让listview滚动到最底部

Glide.with(context).load(content_split)
                        .listener(new RequestListener<String, GlideDrawable>() {
                            @Override
                            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                                return false;
                            }

                            @Override
                            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
//图片加载完成的监听
                                listener.chatPngReady(resource);
                                return false;
                            }
                        })
                        .into(imageView);

如果是在adapter中进行图片加载就可以按照上述方式在adapter中定义回调接口的方式,在图片加载完成的回调方法中去执行让listview或者recycleview滑动到底部的操作

  public interface GlideReadyListener{
        void chatPngReady(GlideDrawable resource);
    }
   @Override
    public void chatPngReady(GlideDrawable resource) {
        if (mListViewMsgItems != null && mListViewMsgItems.getCount()>0){
        // 图片加载完成的时候再让listview滑动到底部
            mListViewMsgItems.setSelection(mListViewMsgItems.getBottom());
        }
    }

或者可以使用RxJava的延时操作符delay或者timer,但是这种依赖较好的网络环境,或者延时时间设置长一些,但用户体验并不好。