2

我已将 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% 正确的):

查看生命周期

4

0 回答 0