android - 使用 Picasso 加载大图像

标签 android image android-asynctask android-imageview picasso

我有一个 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/

相关文章:

.net - 使用 itextsharp 添加图像并跨越多个页面

Android 生命周期——我应该使用服务吗?

android - 添加 nativescript-ui-dataform 插件后 NativeScript tns 构建失败

用于海量数据的 Android ListView 分页

android应用内计费安全验证方法总是返回false

java - 如何将视频从服务器流式传输到 Android 应用程序?

iphone - 在 UIScrollView 上以不同的速度滚动背景

HTML/CSS 平铺边框(左、下、右)

java - AsyncTask doInBackground() 方法中的空指针异常

java - 无法在尚未调用 Looper.prepare() Android 的线程内创建处理程序