3

我正在实现自定义布局。这是一个异构网格,看起来像下面的网格,除了瓷砖将是带有一些文本的图像。此外,它具有动画效果 - 每次更改基础数据(添加、删除、重新排序项目)时,都会有一个动画,每个图块都会移动到它的新位置。这非常有效。

整件事都在一个ScrollView. 当用户启动应用程序时,会出现一些磁贴(最多 20 个)。当他到达卷轴的底部时,会加载新的图块。瓷砖是RelativeLayouts

我的问题涉及观点的回收。接受多个子视图的典型布局,例如ListViewGridView具有回收机制。在滚动时,当视图不可见时,它会被回收,并在用户再次看到它时返回。

我需要实现这样的行为吗?如果我不这样做会发生什么?是否有可能实现它,因为当新数据到达时,我可能必须将子视图(以及那些不会在布局的可见部分中的子视图)动画到它们的新位置。

或者也许我应该在位图位于可见区域之外时回收它们?这可能是我可以达到 OutOfMemory 的地方,不是吗?

异构网格

4

1 回答 1

2

我肯定会推荐回收,特别是如果物品的数量实际上是无限的。

除了内存问题,就像你说的,很大程度上取决于位图的处理,当你加载更多的项目时,不回收会导致更多的抖动机会。这是因为需要创建更多视图,而不是回收。

鉴于您使用的是自定义布局,实现视图回收应该非常简单,只需保留视图缓存并遵循类似于 Android 的适配器类的模式(即getView(int position, View convertView ..)。当您需要从屏幕外为视图设置动画时,您将getView()使用一个未使用的视图并更新它以包含您的模型数据(如果您没有为此使用 MVC,我会推荐它)。

于 2013-03-02T10:39:41.440 回答