我正在实施自定义布局。它是一个异质网格,看起来像下面的那个,除了事实,瓷砖将是带有一些文字的图像。此外,它具有动画效果 - 每次更改基础数据(添加,删除,重新排序项目)时都会有动画,每个图块都会移动到新位置。这很有效。
整件事都在ScrollView
内。当用户启动应用程序时,会出现几个图块(最多20个)。当他到达滚动的底部时,新的瓷砖会被加载。磁贴为RelativeLayouts
。
我的问题涉及回收视图。接受多个子视图(如ListView
或GridView
的典型布局具有回收机制。滚动时,当一个视图不可见时,它会被回收,当它再次被用户看到时它会回来。
我是否需要实施此类行为?如果我不这样做会怎么样?甚至可以实现它,因为当新数据到达时,我可能不得不将子视图(也不是布局的可见部分中的这些视图)设置为新位置。
或者我可能只是在位图可见区域外回收位图?这可能是我可以击中OutOfMemory的地方,不是吗?
答案 0 :(得分:2)
我绝对建议回收,特别是如果物品数量实际上是无限制的。
除了内存问题之外,就像你说的那样,很大程度上取决于对位图的处理,当你加载更多项目时,回收不会导致更多的抖动机会。这是因为需要创建更多的视图 - 而不是回收。
实现视图回收应该非常简单,因为您使用的是自定义布局,只需保留视图的缓存并按照与Android的Adapter类相似的模式(即getView(int position, View convertView ..)
。当您需要为视图设置动画时在屏幕外,您将使用getView()
获取未使用的视图并更新它以包含您的模型数据(如果您没有使用MVC,我建议它。)