我已将 3 个自定义视图(SmallTile.java)添加到另一个自定义视图(MyView.java;它基于已弃用的AbsoluteLayout
- 但我计划稍后更改基类)。
我正在尝试通过以下代码在父级中定位 3 个子级:
@Override
protected void onSizeChanged (int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.d(APP, "w=" + w + "; h=" + h + ", oldw=" + oldw + ", oldh=" + oldh);
int count = getChildCount();
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
if (child.getVisibility() == GONE)
return;
int x = mRandom.nextInt(w - child.getWidth());
int y = mRandom.nextInt(h - child.getHeight());
AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
x,
y
);
Log.d(APP, i + ": x=" + x + "; y=" + y);
}
requestLayout();
}
但是,尽管我可以在调试器中看到可行的位置-
在模拟器中,所有孩子的位置都错误 - 在原点:
这里出了什么问题?我认为调用requestLayout()
会调用AbsoluteLayout.onLayout()并因此在新的随机位置重绘孩子?
这是来自互联网的 View 生命周期的随机图片(我意识到,这不是 100% 正确的):