【问题标题】:Can anyone give a good example of a Custom ViewGroup containing a Custom View with measure and layout examples? (In Java)任何人都可以举一个包含自定义视图的自定义视图组的好例子吗? (在 Java 中)
【发布时间】:2011-04-28 01:20:00
【问题描述】:

我在使用自定义视图组和自定义视图时遇到了一些问题。我已经为此做了很多搜索,但是如果我错过了一些东西,请随时将我链接到那里。是的,我已经阅读了 android dev 网站上有关 Views、ViewGroups、measure 和 layout pass 的所有内容,但我仍然对没有任何 Java 示例代码感到困惑。

1)我的理解是child-views需要实现onMeasure和onLayout。这是否意味着父 ViewGroup 需要为其每个子级手动调用 measure() 和 layout() ?如果是这样,这些调用应该位于哪里?他们应该在父母的 onMeasure 和 onLayout 方法中吗?如果是这样,启动整个递归过程的第一个 measure() 和 layout() 调用在哪里。

2) 我看到子视图的布局参数可以使用以下内容进行设置。这段代码是否应该放在父视图组的 onLayout 中?

CustomView cust = new CustomView(context);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
cust.setLayoutParams(params);

如果我想设置一个 MeasureSpec,我是否只需在此处添加它作为另一个规则?

3) 是否可以创建 CustomView 的实例并将其从 CustomViewGroup 的代码中添加到 CustomViewGroup,如果可以,我应该将此代码放在 CustomViewGroup 构造函数中吗?如果不是,是否只是理解您创建 ViewGroups 然后添加所有来自不同外部类的孩子?

4) 在 CustomViewGroup 的 onDraw() 方法中为我的每个子视图调用 draw() 是否常见?

现在,当我执行一些代码来绘制一个圆时,它执行了 view 的 draw 方法,但屏幕上实际上并没有出现任何内容。当我将它添加到 relativeLayout 而不是我的 customViewGroup 时,我没有问题......所以我想我错过了关于如何让视图组显示的关键部分。 (是的,我将 ContentView 设置为 ViewGroup)。

提前致谢!

编辑:请不要给我看 XML,我都是用 Java 做的。

【问题讨论】:

  • 您可能希望将其分解为 8 个单独的问题或至少一些较小的更有针对性的问题。

标签: android


【解决方案1】:

我建议您阅读这些slides 并观看此video

【讨论】:

  • flowLayout 类对我帮助很大!
  • 任何有兴趣进入自定义布局(扩展 ViewGroup)的人都会使用这些幻灯片。考虑到这些幻灯片的作者,我相信在之前的 Google IO 中展示过。感谢您的链接。宝贵的资源
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多