2012-05-18 80 views
0

我有一個延遲加載ListView填充通過網絡獲取的圖像。列表行被設置爲wrap_content,因此一旦圖像加載,它將調整大小,並顯示全幅圖像。當向下滾動時它看起來很棒,但是當滾動行時調整大小並強制底部行離開屏幕。如何在滾動時防止這種跳動?Android ListView圖像調整大小

-----編輯:

圖像是漫畫大小不同。有些是2或3幀,他們不是很高。其他人是單幀漫畫,他們更高。圖像需要佔據整個寬度,並且高度不應該切斷任何漫畫。

+0

你可以修復圖像的最大高度嗎? –

+0

我不行。我只能修正寬度而不會使圖像偏斜太多。 – aravance

+0

如果擔心傾斜,可以設置'ImageView'縮放類型屬性。 –

回答

0

我想出瞭解決方案。當我收到圖像時,我從父級獲取寬度,然後將圖像視圖的高度設置爲parentWidth * bitmapHeight/bitmapWidth。這樣一來,調整大小就會在創建行的視圖時發生,並且一旦我知道位圖的大小,列表就不會像過去那樣跳過。

+1

很想看到一些代碼。 –

+0

我也會欣賞一些代碼;) – Wicked161089

0

假設所下載的所有圖像預計大小相同,大多數開發人員使用的一個很好的解決方案是在真實圖像加載之前使用「虛擬」圖像。該圖像將在本地存在,因此可以幾乎立即加載。在getView方法中,顯示該虛擬圖像,直到下載實際圖像,然後簡單地將其替換。這將阻止你的行的大小。

+0

儘管圖像尺寸不盡相同。這是漫畫,所以其中一些是3個不是很高的漫畫。有些是一個單一的漫畫框架,可以達到高度的4倍。 – aravance

+0

你有什麼辦法知道你即將下載的圖片的大小?如果你不這樣做,你是否至少知道最大高度?否則,當你滾動時,你的高度將會跳躍,並且看起來不會很漂亮。 –

+0

下載圖片後,我可以訪問它的大小。問題是計算圖像佈局階段之前調整大小的高度。在佈局階段,ImageView處理它。 – aravance

0

你必須看到這個link它在後臺線程中下載圖像。圖像緩存在SD卡和內存中,它使用inSampleSize解碼圖像以減少內存消耗,並嘗試正確處理循環視圖。當圖像未完全下載時播放假圖像。 「對不起音樂!!」

+0

我已經控制了內存消耗和緩存管理以及視圖回收。剩下的唯一問題是圖像大小。 – aravance