[我在做一个小型游戏时遇到了问题,该游戏在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()就可以工作,但是使用view()时视图却具有非常罕见的行为,并且当我添加更多视图时,视图将变为几毫秒不可见,并显示在左上角,之后它们会出现在正确的位置,但是突然之间,它们一次又一次地变得不可见,以至于在非常罕见的行为循环中。
[我在做一个小型游戏时遇到了问题,该游戏在ConstraintLayout中添加了很多视图(我已经使用FrameLayout,RelativeLayout和LinearLayout进行了测试。前两个具有相同的结果,而Linear具有非常...
ConstraintLayout
是慢的,特别是如果它包含许多View
,则慢得多,如果它包含嵌套的ConstraintLayouts
。由于您正在手动设置View
的位置,因此可以使用与ViewGroup
不同的ConstraintLayouts
,并通过setX()
,setY()
,setTop()
等设置绝对位置。] >