gpt4 book ai didi

Android - ViewGroup onDraw 是否需要遍历 subview 并显式调用 onDraw?

转载 作者:太空狗 更新时间:2023-10-29 16:41:15 34 4
gpt4 key购买 nike

我花了一整天的时间调试各种将自定义 ViewGroup 添加到另一个自定义 ViewGroup 的方法,但几乎要疯了,因为它们都不起作用,而且没有官方文档或显示如何完成的示例...

基本上,我有 2 个自定义 ViewGroup:

  1. Horizo​​ntalDockView 扩展 ViewGroup
  2. GameEntryView 扩展 FrameLayout

Horizo​​ntalDockView 覆盖了 onDrawonMeasure 等,一切都被正常调用并且完美运行。但是,当我从 Horizo​​ntalDockView 的构造函数中创建 GameEntryView 并调用 addView(gameEntryView) 时,gameEntryView 将无论从任何线程调用 layoutParamsaddView,或者我在父级 Horizo​​ntalDockView 上调用、加载和设置内容 View ,都永远不会显示。如果我通过 horizo​​ntalDockView.getChildAt(); 列出所有 gameEntryView 对象仍然存在。

无奈,我尝试通过 GameEntryView 的 onDrawonMeasuredispatchDraw 方法进行调试,但发现它们实际上都没有被调用!不..一次都没有!

我是否需要遍历父 View (Horizo​​ntalDockView 的)on* 调用中的所有 subview 并显式调用 subview ?我只是在父级上调用 super.on*()。

我确实在父类和子类上都调用了 setWillNotDraw( false );

如何让 child 出现在 parent 的视野中?非常感谢简单的示例或现有的小型开源项目!

非常感谢!

最佳答案

你是否覆盖了onLayout?当 Android 布置您的 ViewGroup 时,您的 ViewGroup 负责布置子项。

这段代码来自一个自定义的 ViewGroup,它将所有的 child 放在彼此之上:

@Override
protected void onLayout(final boolean changed, final int l, final int t, final int r, final int b) {

int count = this.getChildCount();
for (int i = 0; i < count; i++) {

View child = this.getChildAt(i);
child.layout(0, 0, child.getMeasuredWidth(), child.getMeasuredHeight());
}
}

为了完整性,onMeasure 覆盖:

@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {

int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth, parentHeight);

int count = this.getChildCount();
for (int i = 0; i < count; i++) {

View child = this.getChildAt(i);
this.measureChild(
child,
MeasureSpec.makeMeasureSpec(parentWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(parentHeight, MeasureSpec.EXACTLY));
}
}

关于Android - ViewGroup onDraw 是否需要遍历 subview 并显式调用 onDraw?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17544209/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com