У меня проблемы с созданием небольшой игры, которая добавляет много просмотров в 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 () , но представление имеет очень редкое поведение при использовании макета(), и когда я добавляю больше видов, они становятся невидимыми в течение нескольких миллисекунд и появляются в левом верхнем углу, после чего они появляются в правильном положении, но внезапно они становятся невидимыми снова и снова и снова и т. д. в очень редком цикле поведения.