2012-02-07 40 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