【发布时间】:2020-02-04 11:09:57
【问题描述】:
我在做一个小游戏时遇到了问题,它在ConstraintLayout 中添加了很多视图(我已经用FrameLayout、RelativeLayout 和LinearLayout 进行了测试。前两个具有相同的结果,而线性具有非常罕见的行为)并更改视图的大小和位置。
每个游戏循环 (33ms) 中的一些视图都在改变它的大小和位置,所以我在 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() 的情况下工作 但是视图在使用 layout() 时具有非常罕见的行为,当我添加更多视图时,视图会在几毫秒内变得不可见并出现在左上角,之后它们出现在正确的位置,但突然它们在一个非常罕见的行为循环中一次又一次地变得不可见。
【问题讨论】:
标签: android android-layout layout android-view layoutparams