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

问题描述 投票:0回答:1

[我在做一个小型游戏时遇到了问题,该游戏在ConstraintLayout中添加了很多视图(我已经用FrameLayoutRelativeLayoutLinearLayout进行过测试。前两个具有相同的结果,而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具有非常...

android android-layout layout android-view layoutparams
1个回答
0
投票
[ConstraintLayout是慢的,特别是如果它包含许多View,则慢得多,如果它包含嵌套的ConstraintLayouts

由于您正在手动设置View的位置,因此可以使用与ViewGroup不同的ConstraintLayouts,并通过setX()setY()setTop()等设置绝对位置。] >

© www.soinside.com 2019 - 2024. All rights reserved.