如何使用View.layout()方法更改视图大小?

时间:2019-10-07 06:57:40

标签: android android-layout layout android-view layoutparams

我在做一个小型游戏时遇到了问题,该游戏在ConstraintLayout中添加了很多视图(我已经用FrameLayoutRelativeLayoutLinearLayout进行过测试。前两个相同结果和线性(具有非常罕见的行为)并更改视图的大小和位置。

每个游戏循环(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()即可工作,但是该视图在使用layout()时却具有非常罕见的行为,并且当我添加更多视图时,这些视图将变为几毫秒不可见并出现在在最左上角之后,它们出现在正确的位置,但是突然之间,它们一次又一次地变得不可见,以一种非常罕见的行为循环。

1 个答案:

答案 0 :(得分:0)

ConstraintLayout的运行速度较慢,尤其是如果包含许多View时,速度较慢;如果包含嵌套的ConstraintLayouts,则速度要慢得多。

由于您是手动设置View的位置,因此可以使用与ViewGroup不同的ConstraintLayouts,并用setX(),{{ 1}},setY()