2015-04-20 119 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

謝謝,但我不能在這裏得到整個圖片,我有圖像大小,這有什麼幫助?加載圖像時應如何創建佔位符? –