昨天有朋友看到FMX 布局策略 一文中下图的布局,想知道如何设计这种复杂的布局。实际上,这种布局确实比较复杂,设计时确实比较费劲的。
1、钟表环的设计
这个比较简单,用两个 TCircle,假设分别命名为clOuter、clInner,我们将 clInner 的父设置为 clOuter,然后设置 clInner 的 Margins 属性(比如都是10/10/10/10),使其形成一个环。当然,你可以根据需要调整两个圆的Stroke属性来调整环外框的颜色,通过调用 clOuter 的 Fill 属性调整环的效果。
2、时钟标签的设置
时钟环上的黑点及标签的布局控制需要按角度布局。这个是需要计算的细致活,为了方便,我们创建一个 TLine 对象,设置其父为clOuter,LineStyle为Left,然后设置 Size 为 1,这样就造成了一个很有用的参考线,我们命名为LRef。这里为了简单,我省略一些细节。
2.1、设计一个基本的标签
一个基本的标签由一个填充的 TCircle 用来显示时间正点位置,一个 TLabel 来显示时间的值。如下图所示:
现在,我们将其放置到一个 TLayout 上,然后调整两个组件的相对位置,使 TCircle 在 TLabel 上面并水平居中,而TLabel 则位于下部,文本显示为水平居中。
我们将这个创建的标签命名为 L12,用来做为 12 点的标签。
2.2、复制 L12 11次,分别命名为 L01~L11,这样,我们就拥有了 L01~L12 这 12 个基本标签,依次设置其中的 TLabel 的 Text 属性为 I、II、III、IV、V、VI、VII、VIII、IX、X、XI、XII。
2.3、下面是最重要的一步,我们要利用 LRef 做为参考线来在时钟的环上正确的位置上放置 L01~L12。
2.3.1、选中 L01~L12 ,然后在其父统一设置为 clOuter。
2.3.2、选择 L12,调整其位置按参考线对齐。选择 L06,然后设置其 RotateAngle 为 180,然后按参考线靠下对齐。完成后效果如下图所示:
2.3.3、选择LRef,然后设置其 RotateAngle 为 30,让其旋转 30 度,以其为参考线设置L01和L07的位置(两者的 RotateAngle 很容易算是 30 和 210)。
2.3.4、依次类推,分别设置 LRef 的旋转角度为 60、90、120、150,然后参考旋转旋转剩下的标签。
2.3.5、删除掉 LRef,现在时钟表面的基本布局就OK了,至于中间剩下的分布的点,大家可以参考上面的做法,用参考线将其布局到正确的位置上。我在这里就偷个懒,不整了。
3、剩下的内容,相信你参考前述的步骤,也就能够很容易完成了,只是一个墨迹活了。至于表指针,你就可以完全用一个TLayout,然后上面用 TLine 等图形画好,然后在运行时控制 TLayout 的RotateAngle 就可以实现了,相当的简单,不是吗?
好了,这个比较复杂的布局的设计方法,大概就介绍到这里。如果有问题,就跑到 QDAC 官方群里去讨论吧。