父视图绘制子视图有效

时间:2013-01-25 06:41:40

标签: android android-layout view ondraw

例如,顶级LinearLayout视图有300个子视图。但设备屏幕尺寸只显示11个子视图一次。 android如何计算一次可以显示多少个子视图?一个观点如何知道它会被吸引?

被修改
在我的工作中,有一个这样的案例: 父LinearLayout视图可能有数百个子视图。为了获得更好的性能,我的解决方案是这样的:像延迟加载。

  1. List list = new ArrayList(); //包含使用构造View对象的实体对象
  2. 默认加载5子视图。
  3. 父LinearLayout视图最后一个子视图是自定义加载视图,我已覆盖它的onDraw()方法。如果加载View是draw,那意味着我需要获得下一个5子视图(从列表中获取下一个5对象,并创建相应的视图)。

  4. 我想知道android框架如何处理这种情况?

2 个答案:

答案 0 :(得分:0)

  

父LinearLayout视图可能有数百个子视图。为了   为了更好的性能,我的解决方案是这样的:像懒惰的负载。

LinearLayout(可能)数百个子视图与更好的性能相矛盾。我认为你正在寻找的是一个带有无限适配器的ListView(一个简单的谷歌搜索将展示如何实现它,而不是那么困难)。一旦到达最后加载的元素,此适配器将开始加载视图(在加载新内容时显示加载视图)。

如果您仍想使用LinearLayout

如果您只是想在LinearLayout填写首次布局时屏幕内容,您可以在Runnable方法的某个观看点上发布onCreate(如果这是您首先填充LinearLayout)的地方。在Runnable中找到LinearLayout的高度,并将其与当前现有孩子的组合高度进行比较。如果组合子高度小于LinearLayout高度,则添加更多视图以进行补偿。

如果LinearLayout位于ScrollView,并且您希望在加载视图可见时添加其他子项,则监视ScrollView的滚动,并在加载视图变为可见时添加新生儿。查看加载视图何时变得可见将通过检查用户滚动的数量与当前存在的LinearLayout子项的组合高度进行比较来完成。

初步回复:

您的问题对于您想知道的内容有点模棱两可。如果你有一个特定的问题,你应该从那开始。

  

例如,顶级LinearLayout视图有300个子视图。但   设备屏幕尺寸仅显示11次子视图。

请不要让自己陷入这种情况。如果内存不足(因为所有这些视图都将保存在内存中),那么这些数量的视图会导致性能不佳甚至应用程序崩溃。

  

android如何计算一次可以显示多少个子视图?

每个ViewViewGroup都有onMeasure方法来衡量自己及其子项(如果有)。 LinearLayout会调用onMeasure方法,在此方法中,它会测量其子项(使用度量method),为它们提供一些关于它们应该有多大的建议({{1收到一些关于它应该从它的父级有多大的建议)。如果您想了解这是如何完成的,请查看LinearLayout的源代码。

  

视图如何知道它会被绘制?

我不明白你想知道什么。要在屏幕上绘制视图,将调用其LinearLayout方法。

答案 1 :(得分:0)

您是否在顶级LinearLayout视图中使用了滚动条,并在该布局上添加了简单的子视图...