如何避免重叠(重叠)标签?

时间:2011-05-18 09:43:52

标签: flash flex layout label overlap

我必须在屏幕上显示多个标签而不重叠。标签位置应尽可能接近其描述的特征。这些特征可以是屏幕上的点,线或多边形(想象任何种类的地图)。 我必须在我的申请中满足以下要求:

  • 标签的位置必须避免与其他标签叠加(重叠)
  • 标签的位置必须避免与其他要素(多边形和线段)重叠
  • 标签的最佳位置位于其描述的功能的上方和右侧
  • 下方和右侧不太可接受
  • 最不可接受的位置在左侧

我需要提出一种方法来实现这一目标。

在我开始尝试随机做这件事之前,我希望这里有人可能已经这样做了,并且能够就如何开始给我一些建议。

基本上,使用标签,我可以使用边界框来相互比较它们。虽然我不知道这样做的好方法。由于它们标记的屏幕上的线段和多边形,我真的不知道应该做些什么以避免重叠。我希望在避免标签本身重叠的基础上不需要太多的努力。

如果我只需要处理与其他标签重叠的标签,我认为排斥会起作用。但是,如果我在屏幕的一半处绘制了一个线段,我不知道如何使用排斥技术避免重叠。

我使用的语言是Actionscript 3和Flex框架。我不相信Flex有任何类似Java Spring的布局管理器类可以为我做这项工作。

无论如何,欢迎链接或建议。我可以允许一些蛮力;我不明白我怎么能做到这一点。谢谢!

PS我相信这个问题的技术术语是“重叠”。

1 个答案:

答案 0 :(得分:0)

如果没有引用所有标签和其他需要避免的形状/线条,我认为没有办法实现这一目标。假设您有这些引用,只需绑定到Flex Framework方法即可。

在updateDisplayList()循环标签上;并将它们与屏幕上的其他内容一起定位。您可以使用getExplicitOrMeasuredWidth()和getExplicitOrMeasuredHeight()方法来确定相关项目所需的空间。

如果您使用内置的Flex容器,例如VBox或HBox,则标签和其他线将彼此相对定位。或者,如果您使用Spark,VGroup或HGroup将提供相同的功能。