用于加载完成图片后进行的整理操作,比如在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,但是这种依赖较好的网络环境,或者延时时间设置长一些,但用户体验并不好。