我可以暂停绘图以在Flex中执行多个连续更新吗?

时间:2008-11-03 09:08:34

标签: flex drawing

我写了一个简单的日历控件,可以选择单日,周,月等。简单来自于我自己并没有真正做任何绘图,而是选择创建一堆盒子和标签作为日历的日期单元格。

选择日期或日期范围时,我需要突出显示该范围。通过遍历单元格并切换它们的样式可以轻松完成。 [edit:] 然而,这似乎导致延迟,在此期间首先绘制单元格,就好像样式名称为空白,然后使用正确的样式重新绘制,尽管事实上我从来没有将样式显式设置为null - 我在“CalendarCell”和“CalendarCellSelected”之间切换。

如果这是Windows窗体,我会在父容器上调用SuspendLayout,以确保只有在完成更新后才重新绘制控件。我想知道的是Flex是否存在类似的解决方案。我想避免“手动”绘制整个日历,可以这么说,如果可能的话。

编辑更改了问题说明,以更准确地反映我所看到的内容。

3 个答案:

答案 0 :(得分:1)

你在使用callLater()吗?

如果你使用callLater(),它可能会影响你的视觉效果,因为它会批量更改,直到它需要绘制一个框架或你强制使用validateNow()或类似的框架绘制。在你的情况下,这可能已经足够了。

答案 1 :(得分:0)

这可能不是您正在寻找的,但Adobe的David Coletta发布了他们在Buzzword中使用的a video explaining an EventCoalescer来推迟更新应用UI特定区域的事件,直到用户停止移动例如,文本中的插入点。

This blog post by Hans Van de Velde也有类似的解决方案,以及它的实际代码。

答案 2 :(得分:0)

您的日历控件是否为UIComponent?它是否使用标准的失效方法,如commitProperties(),updateDisplayList()等?

您可能想要做的是保留将更改其样式的单元格的私有数组,但随后在commitProperties()覆盖中执行实际的样式切换。我只是不确定setStyle()是否会触发validateNow(),因为闪烁有点令人惊讶。