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()が呼び出され、子が新しいランダムな位置に再描画されると思いましたか?

これは、ビューのライフサイクルのインターネットからのランダムな写真です (100% 真実ではないことは認識しています)。

ライフサイクルを表示

4

0 に答える 0