2012-02-07 65 views
1

我有一個ListView,每個項目都是一個包含多個視圖的自定義佈局(包括〜445x250的大圖像,〜40x40的較小圖像等)。在滾動時,動畫非常波動。ListView顯示大圖像時性能差

有人可以推薦我如何提高性能?

我試過的一種方法是消除正在使用的圖像中的任何透明度。這確實稍微改進了一點,但在新項目滾動查看之前,仍然有明顯的滯後。

更新: 這裏的自定義佈局視圖層次結構(各項目) - http://pastie.org/3333903

+0

發佈您的列表項目的佈局。 – 2012-02-07 11:57:19

+0

您是否在自定義適配器的getView()方法中使用了'convertView'和'ViewHolder'模式? – Luksprog 2012-02-07 11:57:58

+0

@slukian我使用convertView,但不是ViewHolder模式。我曾嘗試過ViewHolder模式,但改進不可察覺。我懷疑造成滯後的主要原因是大型縮略圖的渲染,佔據屏幕的30-40%。 – sparkymat 2012-02-07 11:59:32

回答

3

綜觀提供的佈局,有可能會導致性能問題的幾件事情:

  • 您的視圖層次有4深度您應該讓您的視圖層次儘可能淺。考慮在可能的情況下使用RelativeLayout/TableLayout而不是嵌套LinearLayout s。
  • 你有嵌套的權重。儘量避免嵌套加權視圖。
  • 您有一個lot的行項目的意見。請記住ListView的用途 - 如果您的行開始變得複雜,則可能是顯示此信息的其他信息的標誌。
  • A GestureOverlayView對於ListView行項目似乎有點沉重。這是必要的嗎?考慮到ListView可以通過觸摸進行滾動,在行項目上進行自定義手勢可能有點混亂。

您還可以嘗試使用android:persistentDrawingCache="scrolling"和ViewHolder模式來擠出更多的性能。

如果您下載最新版本的ADT,它還將指導您優化佈局。

除了佈局優化,最小的工作應該在的getView方法中完成。

此外,您可以使用android:hardwareAccelerated="true"來利用Android 3.0+中的硬件。

+0

敲除視圖層次結構中的整個子樹(第2-14行)並將RelativeLayout @ 15的內容移到外面,我仍然看到相當的延遲(儘管肯定比以前小)。這讓我覺得佈局優化只有很多工作要做。使用SurfaceView進行自定義繪圖也許是有意義的。你怎麼看? – sparkymat 2012-02-07 13:27:22

+0

啊,也許你在適配器的'getView'上做了太多工作? – 2012-02-07 13:52:52

+0

我會檢查我是否可以優化getView。 – sparkymat 2012-02-07 14:15:30

0

您可以使用動態表格佈局,而不是使用列表視圖。它會提高性能。動態表格佈局將調整大圖像和小圖像。它會對你有所幫助。

+0

你能提供一些教程或示例代碼的鏈接嗎? – sparkymat 2012-02-07 12:12:51

+0

我有動態表格layout.please的代碼檢查和使用 – 2012-02-07 12:15:03

+0

您能否提供動態表格佈局代碼的鏈接? – sparkymat 2012-02-07 12:27:33