Изменение положения дочерних представлений в onSizeChanged родительской ViewGroup

Я добавил 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% верно):

Посмотреть жизненный цикл

0 ответов

Другие вопросы по тегам