我正在使用ListView来显示与这些图像相关的一些图像和标题。我正在从互联网上获取图像。是否有一种方法可以延迟加载图像,以便在文本显示时,UI不会被阻止,图像在下载时显示?
图像总数不是固定的。
我正在使用ListView来显示与这些图像相关的一些图像和标题。我正在从互联网上获取图像。是否有一种方法可以延迟加载图像,以便在文本显示时,UI不会被阻止,图像在下载时显示?
图像总数不是固定的。
当前回答
除了异步加载数据缓存外,您可能需要UI缓存,如setViewCacheSize
除了加载可见项数据外,您可能需要加载近似的可见项数据
AndroidX分页库是另一个选项,例如,您可以从SQLite数据库加载、缓存和显示10000000个项目到RecyclerView。参考PagedList
例子:假设列表视图可见项为[6,7,8,9,10],您可能需要加载[6,7,8,10]并预加载项[1,2,3,4,5]和[11,12,13,14,15],因为用户可能会滚动到前页或后页
其他回答
一些答案已经提到了使用各种图像库,如通用图像加载器和androidimageloader等。这是一个老问题,但对于仍在寻找类似内容的人来说,有几个这样的库用于图像加载/缓存。
毕加索
使用杰克·沃顿的毕加索图书馆。(ActionBarSherlock开发人员提供的完美图像加载库)
一个强大的Android图像下载和缓存库。
图像为Android应用程序添加了急需的上下文和视觉效果。Picasso允许在应用程序中轻松加载图像,通常只需一行代码!
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
在Android上加载图像的许多常见陷阱都由毕加索自动处理:
在适配器中处理ImageView回收和下载取消。使用最少内存的复杂图像转换。自动内存和磁盘缓存。
毕加索杰克·沃顿图书馆
滑行
Glide是一个快速高效的Android开源媒体管理框架,它将媒体解码、内存和磁盘缓存以及资源池打包成一个简单易用的界面。
Glide支持获取、解码和显示视频剧照、图像和动画GIF。Glide包含一个灵活的API,允许开发人员插入几乎任何网络堆栈。默认情况下,Glide使用一个基于HttpUrlConnection的自定义堆栈,但也包括Google的Volley项目或Square的OkHttp库的实用程序库插件。
Glide.with(this).load("your-url-here").into(imageView);
Glide的主要关注点是尽可能平滑快速地滚动任何类型的图像列表,但Glide对于任何需要获取、调整大小和显示远程图像的情况都非常有效。
Glide图像加载库
Facebook上的壁画
Fresco是一个在Android应用程序中显示图像的强大系统。
Fresco负责图像加载和显示,因此您不必这样做。它将从网络、本地存储或本地资源加载图像,并在图像到达之前显示占位符。它有两级缓存;一个在存储器中,另一个在内部存储器中。
壁画Github
在Android4.x及更低版本中,Fresco将图像放在Android内存的一个特殊区域。这让您的应用程序运行得更快,并且更少发生可怕的OutOfMemoryError。
壁画文献
我一直在使用新的Android Volley Library com.Android.Volley.toolbox.NetworkImageView中的NetworkImageView,它似乎工作得很好。显然,这是Google Play和其他新的Google应用程序中使用的相同视图。绝对值得一看。
Google I/O 2013凌空图像缓存教程开发者Google活动
我可以推荐一种类似魅力的不同方式:Android Query。
您可以从这里下载JAR文件
AQuery androidAQuery = new AQuery(this);
例如:
androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW);
它非常快速和准确,使用它,您可以找到更多的功能,如加载时的动画、获取位图(如果需要)等。
1.Picasso允许在应用程序中轻松加载图像,通常只需一行代码!
使用渐变:
implementation 'com.squareup.picasso:picasso:(insert latest version)'
只有一行代码!
Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);
2.Glide Android的图像加载和缓存库,专注于平滑滚动
使用渐变:
repositories {
mavenCentral()
google()
}
dependencies {
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
//对于简单视图:
Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView);
3.湿壁画是一个在Android中显示图像的强大系统Fresco负责图像加载和显示到
壁画入门