2015-04-20 117 views
0

我在我的应用程序中使用毕加索的列表视图,我面临的问题是,当我加载图像与Picasso.with(context).load("file:///path/to/image/in/SD").into(imageView) 和滚动listvie,w加载的图像推动列表向上或者在图像加载时向下,下面描述了我想说的内容。毕加索的图像占位符 - Android

item 1 
======== 
item 2 
======== 
item 3 

现在让我们说我向上滚动和列表停在15位置

item 15 ///Picasso started loading the image but the image isn't ready yet 
======== 
item 16 
======== 
item 17 



item 15 //after few milliseconds the image is loaded into the image view 

image view is loaded and pushed the list down 
--------- 
|  | 
|  | 
|  | 
--------- 

======== 
item 16 
======== 
item 17 

我已经都保存在本地与他们在DB路径的图像。 Facebook在使用灰色图像的地方做得非常好,然后他们使用灰色占位符的相同尺寸加载图像,并且btw占位符根据图像进行更改。

问题是如何将一个像黑色或灰色图像一样的占位符作为占位符,并具有与加载完成后将要加载的图像的相同尺寸的占位符,以便在不推送列表的情​​况下替换它?

请注意,使用.placeholder()不好,因为尺寸不会相同。

+0

您可以设置imageViews的最小和最大尺寸。这种方式,并与占位符,名单不会'跳'。但是,为了提供一个占位符,其大小取决于要加载的图像的大小,因此需要首先获取图像的大小。你也可以这样做。预取所有图片大小,相应地添加占位符并延迟加载图片。 – JacksOnF1re

回答

0

您可以更改目标图像视图大小,但是您需要知道目标大小,然后才能使用picasso开始DL图像。它只是不会为你自动工作。它应该以某种方式来了解目标图像大小。如果谈到有关从互联网DLed的图像列表,那么通常应用程序会在DL到它之前获取有关图像(网址,大小等)的所有必需信息。你的应用程序拥有项目资源中的所有图像。因此,要实现您的目标,您应该在使用BitmapFactory来获取图像大小,然后将任务加载到毕加索。

+0

我可以将图像的大小与SD路径一起保存在数据库中,现在让我们说我已经将它保存在数据库中了。我该如何执行您的建议? –

+0

毕加索有一个相应的方法:.resize(imageWidth,imageHeight) – Stan

+0

谢谢,但我不能在这里得到整个图片,我有图像大小,这有什么帮助?加载图像时应如何创建占位符? –