【问题标题】:InvalidateSize without screen flash?InvalidateSize 没有屏幕闪烁?
【发布时间】:2009-12-29 22:55:37
【问题描述】:

以下是场景:我等待 mx:Text 对象的 creationComplete 事件发生,此时我可以访问其受保护成员 textField 的 setTextFormat 方法。 (textField 在 creationComplete 之前无效。)此时,通过 textField.setTextFormat 完成的文本格式化会增加文本的高度。但是 mx:Text 本身在我调用 invalidateSize 之前不会接收到这种高度变化。然而,在我的例子中,invalidateSize 会导致整个文本被重绘,导致它在屏幕上闪烁。但是,如果我只是手动更改浏览器窗口大小,则文本高度更改不会像那样闪烁文本。那么我如何通过函数调用完成手动更改浏览器窗口大小时发生的事情。 (我只是想让 mx:Text 获取通过 textfield.setTextFormat 完成的高度变化。)

【问题讨论】:

    标签: apache-flex actionscript-3


    【解决方案1】:

    您是否尝试将您的文本字段放入精灵或影片剪辑中并使用您的回调对其进行缩放?

    【讨论】:

    • 存在无法更改的容器和子对象等复杂结构。我所知道的是,现在如果我在有问题的 Text 对象上调用 invalidateSize ,它会调整大小但屏幕闪烁不可接受。如果我只是手动调整浏览器的大小,文本控件也会调整大小但没有屏幕闪烁。所以问题是,当我手动调整浏览器大小时会发生什么,如何在代码中做到这一点,以使 Text 对象改变其高度,而不会在调用 invalidateSize 时出现可笑的文本闪烁。
    • 顺便说一句,我认为 Mx:Text 的 textfield 属性受到保护是有原因的,因为它与 mx:Text 不完全同步,无法成为其公共接口的一部分。但是由于 setTextFormat 只能通过 textField 访问,所以我必须使用它。所以现在不知何故,需要告诉 mx:Text 本身,“嘿,你的身高已经改变,因为你的 textField 属性中发生了一些事情。”但如果我通过 Text.invalidateSize() 执行此操作,我会得到我不想要的屏幕闪烁。
    【解决方案2】:

    倒枪

    实际上我可以通过调用来避免屏幕闪烁

      txt1.invalidateSize();    
      txt1.validateNow();
    

    在调用 txt1.ui_txtfld().setTextFormat(....) 之后立即

    (ui_txtfld() 是我如何使受保护的属性 textField 可见。)

    但是,在我的代码的其他地方,也有必要不直接引用 txt1.height,而是,

    (txt1.ui_txtfld().textHeight+4)*txt1.scaleY,

    因为 txt1.textField.textHeight 属性在更改 textField 的高度后立即有效,而 txt1.height 则无效。

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2015-11-05
      • 2014-11-29
      • 1970-01-01
      相关资源
      最近更新 更多