我有一个 ListView ,我在其中加载带有人名的图像。 ListView 中大约有 538 个项目。我从 url 获取人物图像。目前我正在做以下事情:-
Picasso.with(getContext()).load(url).resize(70,70).onlyScaleDown().into(im1);
URL 中的图像非常大,加载某些图像需要花费大量时间,加载时也会占用我的内存。有人可以帮助我高效快速地加载图像吗?
一个人的示例图像可以在以下 URL 中找到:-
https://theunitedstates.io/images/congress/original/D000626.jpg
最佳答案
您可以使用onlyScaleDown()
调整大小
Picasso
.with(context)
.load(imageUrl)
.resize(6000, 2000)
.onlyScaleDown() // the image will only be resized if it's bigger than 6000x2000 pixels.
.into(imageViewResizeScaleDown);
或者你可以使用fit()
Picasso
.with(context)
.load(imageUrl)
.fit()
// call .centerInside() or .centerCrop() to avoid a stretched image
.into(imageViewFit);
fit() 正在测量目标 ImageView 的尺寸,并在内部使用 resize() 将图像尺寸缩小到 ImageView 的尺寸。关于 fit() 有两点需要了解。首先,调用 fit() 会延迟图像请求,因为 Picasso 需要等到可以测量 ImageView 的大小。其次,您只能将 fit() 与 ImageView 作为目标一起使用(我们稍后会查看其他目标)。
优点是图像的分辨率尽可能低,而不会影响其质量。较低的分辨率意味着缓存中保存的数据较少。这可以显着减少图像对应用内存占用的影响。总而言之,如果您更喜欢较低的内存影响而不是更快的加载时间,fit() 是一个很好的工具。
关于android - 使用 Picasso 加载大图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40665019/