Android 父视图绘制子视图

Android 父视图绘制子视图,android,android-layout,view,ondraw,Android,Android Layout,View,Ondraw,例如,顶级LinearLayout视图有300个子视图。但设备屏幕尺寸仅显示11个子视图一次。android如何计算一次可以显示多少子视图?视图如何知道它将被绘制? 已编辑 在我的工作中,有这样一个案例: 父LinearLayout视图可能具有数百个子视图。为了获得更好的性能,我的解决方案是这样的:喜欢延迟加载 列表=新的ArrayList()//包含使用构造视图对象的实体对象 默认加载5子视图 父LinearLayout视图最后一个子视图是自定义加载视图,我已经重写了它的onDraw()方法。

例如,顶级LinearLayout视图有300个子视图。但设备屏幕尺寸仅显示11个子视图一次。android如何计算一次可以显示多少子视图?视图如何知道它将被绘制?

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

  • 列表=新的ArrayList()//包含使用构造视图对象的实体对象
  • 默认加载5子视图
  • 父LinearLayout视图最后一个子视图是自定义加载视图,我已经重写了它的onDraw()方法。若加载视图是draw,这意味着我需要获取下一个5个子视图(从列表中获取下一个5对象,并创建相应的视图)

  • 我想知道android框架是如何处理这个问题的

    父LinearLayout视图可能具有数百个子视图。整齐 为了提高性能,我的解决方案是这样的:像延迟加载一样

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

    如果仍要使用
    线性布局

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

    如果
    线性布局
    位于
    滚动视图
    中,并且您希望在加载视图可见时添加其他子项,则监控
    滚动视图
    的滚动,并在加载视图可见时添加新子项。查看加载视图何时变为可见,可以通过检查用户滚动了多少与
    LinearLayout
    当前子级的组合高度进行比较

    初始响应:

    关于你想知道什么,你的问题有点模棱两可。如果你有一个特定的问题,你应该从这个开始

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

    请不要陷入这样的境地。如果内存不足(因为所有这些视图都将保留在内存中),那么视图数量过大将导致性能低下甚至应用程序崩溃

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

    每个
    视图
    视图组
    都有
    onMeasure
    方法来测量自身及其子对象(如果可用)。
    LinearLayout
    将调用其
    onMeasure
    方法,在该方法中,它将测量它的子对象(使用measure
    方法
    ),给他们一些关于它们应该有多大的建议(LinearLayout从其父对象那里收到一些关于它应该有多大的建议)。如果您想了解这是如何实现的,请查看
    线性布局的源代码

    视图如何知道它将被绘制


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

    在顶层线性布局视图中使用滚动条,并在该布局上添加子视图,这很简单…

    从这里读取测量特性未指定,谢谢您的回答。我想知道安卓如何处理这个问题的细节。我看到的是LinearLayout源代码,而不是计算逻辑。@boiledwater如果您查看
    LinearLayout
    的源代码,您将在
    onMeasure
    中看到它是如何测量其子女的。每当需要显示/重新显示视图层次结构时,系统将调用
    onMeasure
    回调。