Glide
Glide是一个快速高效的Android开源媒体管理和图像加载框架,它将媒体解码、内存和磁盘缓存以及资源池封装到一个简单易用的界面中。
Glide支持获取、解码和显示视频剧照、图像和动画GIF。Glide包含一个灵活的API,允许开发人员插入几乎任何网络堆栈。默认情况下,Glide使用自定义的基于HttpUrlConnection的堆栈,但也包括插入谷歌的Volley项目或Square的OkHttp库的实用程序库。
Glide的主要重点是使滚动任何类型的图像列表尽可能平滑和快速,但Glide也适用于几乎任何需要获取、调整大小和显示远程图像的情况。
引用
repositories {
google()
mavenCentral()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.16.0'
}
兼容性
最低Android SDK:Glide v4要求API级别至少为14。
编译Android SDK:Glide v4要求您根据API 26或更高版本进行编译。
如果你需要支持旧版本的Android,可以考虑使用Glide v3,它适用于API 10,但没有得到积极维护。
okhttp3.x:有一个可选的依赖项,称为okhttp3集成,请参阅文档页面。
Volley:有一个可选的依赖项,称为截击集成,请参阅文档页面。
圆形图片:CircleImageView/CircularImageView/RoundedImageView已知在TransitionDrawable(.crossFade()与.tumbnail()或.placeholder())和动画GIF方面存在问题,请使用BitmapTransformation(.circleCrop()将在v4中提供)或.dontAnimation()来解决此问题。
巨大的图像(地图、连环画):Glide可以通过下采样加载巨大的图像,但不支持缩放和平移ImageViews,因为它们需要特殊的资源优化(如平铺)才能在没有OutOfMemoryErrors的情况下工作。
问题描述
两层以上的RecycView嵌套时,可能会出现内层RecycView中的item出现加载错位的问题。
错位原因
加载图片时,每个子条目的position有重复的可能
比如每个条目下有10张图片(或者其他资源),那么子条目的position都是0-9;
此时滑动,如果后台在进行加载动作,position位置对上的话,会直接加载非本条目的图片,导致本条目应该加载的图片没被加载出来,表现出错位;
解决方案
在adpter中,给图片加载控制设置tag(该tag最好保证唯一性,不会与其他条目重复)
将设置的tag,用list或者map保存,在加载图片时将list中的tag与控件getTag进行对比,相等则加载
场景描述
该问题出现在第一层RecycView作为标题或者日期筛选,内层RecycView作为Item展现的情况下