2016-11-17 80 views
2

我有一个列表视图,其中我加载了带有人名的图像。列表视图中有大约538个项目。我从网址获取人物的图像。目前,我做了以下内容: -用Picasso加载的大图像

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

出现在URL中的图像是在一些图像的大小和加载非常大需要大量的时间,同时也吞噬了我的记忆,而装载。有人可以帮助我有效和快速地加载图像。

一个人

示例图像可以在下面的网址找到: -

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

回答

4

您可以使用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()is measu响铃目标ImageView的尺寸并在内部使用resize()将图像尺寸缩小为ImageView的尺寸。关于fit()有两件事要知道。首先,调用fit()可以延迟图像请求,因为毕加索需要等待ImageView的大小才能被测量。其次,您只能使用fit()和ImageView作为目标(我们稍后会看到其他目标)。

优点是图像处于尽可能低的分辨率,而不会影响其质量。分辨率越低意味着缓存中的数据量越少。这可以显着减少图像在应用程序内存占用空间中的影响。总之,如果您希望在较短的加载时间内获得较低的内存影响,fit()是一个很好的工具。

+0

你应该添加''.centerInside()'',否则图像将被调整为你指定的大小。 –

相关问题