Как использовать метод View.layout () для изменения размера представления? - PullRequest
0 голосов
/ 07 октября 2019

У меня проблемы с созданием небольшой игры, которая добавляет много просмотров в ConstraintLayout (я уже тестировал с FrameLayout, RelativeLayout и LinearLayout. Первые два с тем же результатом и Linear с очень редким поведением)и изменяет размер и положение представлений.

Каждый игровой цикл (33 мс) некоторые виды меняют свой размер и положение, поэтому я делаю это с помощью переменной LayoutParams, применяемой к представлению в каждом цикле с помощьюновый размер.

params.width = realWidth;
params.height = realHeight;

и я делаю это для позиции:

view.setX(realX);
view.setY(realY);

Проблема в том, что изменение не отражается, если я не позвонил view.requestLayout(), и этоогромная проблема, потому что requestLayout() восстанавливает родительский макет и все его дочерние элементы, замедляя игру.

Как можно отразить изменения размера представления без вызова requestLayout? Я читал, что вы можете достичь этого с view.layout(). Поэтому я изменил свой код следующим образом:

view.layout((int)realX, (int)realY, (int)realX+realWidth, (int)realY+realHeight);

Проблема в том, что работает без вызова requestLayout () , но представление имеет очень редкое поведение при использовании макета(), и когда я добавляю больше видов, они становятся невидимыми в течение нескольких миллисекунд и появляются в левом верхнем углу, после чего они появляются в правильном положении, но внезапно они становятся невидимыми снова и снова и снова и т. д. в очень редком цикле поведения.

1 Ответ

0 голосов
/ 07 октября 2019

ConstraintLayout медленный, особенно если он содержит много View с, и намного медленнее, если он содержит вложенные ConstraintLayouts.

Из-за того, что вы вручную устанавливаете положение для View с,Вы можете использовать ViewGroup, отличное от ConstraintLayouts, и установить абсолютную позицию с помощью setX(), setY(), setTop() и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...