装载毕加索的大图像

Zxx*_*xxx 4 android image android-imageview android-asynctask picasso

我有一个列表视图,我在其中加载了具有人名的图像.列表视图中有大约538个项目.我从网址获取人物的图像.目前我正在做以下事项: -

Picasso.with(getContext()).load(url).resize(70,70).onlyScaleDown().into(im1);

URL中存在的图像非常大,一些图像的加载需要花费大量时间,并且在加载时也会占用我的内存.有人可以帮我快速有效地加载图像.

可以在以下URL中找到一个人的示例图像: -

https://theunitedstates.io/images/congress/original/D000626.jpg

Lui*_*rra 10

您可以使用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);
Run Code Online (Sandbox Code Playgroud)

或者你可以使用 fit()

Picasso  
    .with(context)
    .load(imageUrl)
    .fit()
    // call .centerInside() or .centerCrop() to avoid a stretched image
    .into(imageViewFit);
Run Code Online (Sandbox Code Playgroud)

fit()测量目标ImageView的尺寸,并在内部使用resize()将图像大小减小到ImageView的尺寸.fit()有两点需要了解.首先,调用fit()可以延迟图像请求,因为Picasso需要等到可以测量ImageView的大小.其次,您只能将fit()与ImageView一起用作目标(稍后我们将查看其他目标).

优点是图像处于尽可能低的分辨率,而不会影响其质量.较低的分辨率意味着要在缓存中保留较少的数据.这可以显着降低图像在应用内存占用中的影响.总之,如果您希望在更快的加载时间内降低内存影响,fit()是一个很好的工具.