Algorithm 用户界面的快速布局算法

Algorithm 用户界面的快速布局算法,algorithm,performance,user-interface,layout,Algorithm,Performance,User Interface,Layout,我有许多UI元素,如面板、编辑字段、按钮、标签等。因此面板包含其他包含输入字段、编辑器等的面板。大多数元素都是可编辑和/或可调整大小的,这意味着每当我更改任何内容时,许多相邻的UI元素都应该更改其在窗格上的宽度、高度和x/y位置。它可以很好地处理少量元素,但当元素数为数千时,速度会非常慢。 在这种情况下,是否可以使用快速布局算法?请注意,我不能使用任何现有的布局管理器,应该提出我自己的实现。我建议借鉴Android playbook,使用更大的“网格”,并以模块化倍数调整所有内容的大小-这避免了

我有许多UI元素,如面板、编辑字段、按钮、标签等。因此面板包含其他包含输入字段、编辑器等的面板。大多数元素都是可编辑和/或可调整大小的,这意味着每当我更改任何内容时,许多相邻的UI元素都应该更改其在窗格上的宽度、高度和x/y位置。它可以很好地处理少量元素,但当元素数为数千时,速度会非常慢。
在这种情况下,是否可以使用快速布局算法?请注意,我不能使用任何现有的布局管理器,应该提出我自己的实现。

我建议借鉴Android playbook,使用更大的“网格”,并以模块化倍数调整所有内容的大小-这避免了您每次都需要解决背包问题

例如,不使用宽度为80、高度为40的按钮,而是将其作为元数据存储为{2:1}(假设布局网格为40^40个正方形)

这样,如果您有一个空间为{2:12}的工作面板,则可以用两个大小为{2:6}的对象或3个大小为{2:4}的对象填充

适应max也很简单,因为任何可用空间都可以放大(比如删除一个{1:1}项,您可以只扩展它旁边的一个项来占据空间等等-当然,您可以创建自己的规则来确定对象是否可以在单个方向上缩放等


这种方法的另一个优点是,您也可以轻松地管理不同的屏幕大小和分辨率,同时保持相同的框架和外观。

您已经尝试了什么?我尝试了一种明显的暴力方法,每次编辑或调整某个内容时都会计算所有内容。我猜您的“重新计算所有内容”算法太慢了。看看HTML+CSS是如何在一个包含数千个元素的网页上即时布局的。重新计算所有内容应该(接近)元素数量呈线性。您使用的是什么技术?我想如果您不能使用现有库,您可能正在嵌入式平台上进行低级绘图?您可能会发现这很有帮助: