我有一个ListView,每个项目都是一个包含多个视图的自定义布局(包括〜445x250的大图像,〜40x40的较小图像等)。在滚动时,动画非常波动。ListView显示大图像时性能差
有人可以推荐我如何提高性能?
我试过的一种方法是消除正在使用的图像中的任何透明度。这确实稍微改进了一点,但在新项目滚动查看之前,仍然有明显的滞后。
更新: 这里的自定义布局视图层次结构(各项目) - http://pastie.org/3333903
我有一个ListView,每个项目都是一个包含多个视图的自定义布局(包括〜445x250的大图像,〜40x40的较小图像等)。在滚动时,动画非常波动。ListView显示大图像时性能差
有人可以推荐我如何提高性能?
我试过的一种方法是消除正在使用的图像中的任何透明度。这确实稍微改进了一点,但在新项目滚动查看之前,仍然有明显的滞后。
更新: 这里的自定义布局视图层次结构(各项目) - http://pastie.org/3333903
综观提供的布局,有可能会导致性能问题的几件事情:
RelativeLayout
/TableLayout
而不是嵌套LinearLayout
s。ListView
的用途 - 如果您的行开始变得复杂,则可能是显示此信息的其他信息的标志。GestureOverlayView
对于ListView
行项目似乎有点沉重。这是必要的吗?考虑到ListView
可以通过触摸进行滚动,在行项目上进行自定义手势可能有点混乱。您还可以尝试使用android:persistentDrawingCache="scrolling"
和ViewHolder模式来挤出更多的性能。
如果您下载最新版本的ADT,它还将指导您优化布局。
除了布局优化,最小的工作应该在的getView
方法中完成。
此外,您可以使用android:hardwareAccelerated="true"
来利用Android 3.0+中的硬件。
发布您的列表项目的布局。 – 2012-02-07 11:57:19
您是否在自定义适配器的getView()方法中使用了'convertView'和'ViewHolder'模式? – Luksprog 2012-02-07 11:57:58
@slukian我使用convertView,但不是ViewHolder模式。我曾尝试过ViewHolder模式,但改进不可察觉。我怀疑造成滞后的主要原因是大型缩略图的渲染,占据屏幕的30-40%。 – sparkymat 2012-02-07 11:59:32