2015-07-03 37 views
2

我正在使用Picasso將圖像加載到ListView單元格中,並且當前使用佔位符圖像。所以,當用戶向下滾動時,ImageView中的佔位符圖像被替換爲需要在那裏的真實圖像(來自URL)。然而,加載真實圖像/替換佔位符圖像的過程不會發生,直到單元處於屏幕的視野中,這意味着用戶不斷看到佔位符圖像變爲真實圖像。有沒有辦法讓這個過程在屏幕外完成,以便用戶不會看到並獲得更好的用戶體驗?在行可見之前讓畢加索加載圖像

+0

你需要找到一種方法來在列表視圖中看到更多的視圖 –

+0

你會怎麼做呢?據我所知,ListView並不具備與ViewPager相同的功能,您可以在其中實際定義左右刷卡的離線視圖數量。 –

+0

我認爲這個問題的標題有點不準確。我在下面的答案解決了如何「讓畢加索在行可見之前加載圖像」,但看起來您真正想知道的是「如何在可見之前準備列表項視圖」。我不知道ListView是否可能。您可能想要使用RecyclerView,而不是http://developer.android.com/reference/android/support/v7/widget/RecyclerView.html – Kazuki

回答

2

您可以使用fetch()方法熱身緩存

Picasso.with(context).load(urlToPrefetch).fetch(); 

注意,這恰恰是最努力的基礎。根據您的配置,緩存可能會在您確實需要之前刪除,即使存在磁盤緩存,Picasso也會顯示佔位符,直到它處理映像(儘管它必須比使用遠程服務器加載映像時更快完成)。

+0

你有這樣的例子。我目前正在使用這樣的東西加載它:Picasso.with(parentFragment.getActivity()) .load(category.getCategoryIconUrl()) .placeholder(R.drawable.placeholder_icon) .into(viewHolder.categoryIcon); –

+0

但是您的示例不會a)指定佔位符圖像或b)將獲取的圖像加載到的圖像視圖。 –

+0

是的,所以這是「讓畢加索在行之前加載圖像可見」的答案。 您可以預先調用fetch()方法(例如,甚至在用戶顯示listview之前)。圖像加載到緩存中,然後在適配器的onGetView方法中,您將調用相同的 Picasso.with(parentFragment.getActivity()).load(category.getCategoryIconUrl()).placeholder(R.drawable.placeholder_icon).into( viewHolder.categoryIcon); 然後,下載HTTP客戶端不需要發出網絡請求,而只需從緩存中讀取,這樣您就可以縮短顯示佔位符的時間 – Kazuki