我是一名Flex新手,负责增强现有应用程序。其中一项增强功能是让现场显示时间在显示时间和日期之间来回平滑地消失。
我知道正确的方法是将字体文件嵌入到应用程序中,这样我就可以直接淡入和淡出标签。如果可以的话,我试图避免这种情况,因为我宁愿尽可能不引人注目地改变我。
我想出了一个合理的解决方法:创建一个“隐私屏幕”,恰好是时钟背景的确切大小,形状和颜色;将其alpha初始化为0;然后在更改时间/日期时,淡入隐私屏幕,进行更改,然后再次淡出屏幕。
代码看起来像这样:
var targets:Array = new Array();
targets.push(this.privacyScreen);
this.effectFadeIn.play(targets);
this.mylabel.text = "I am a date and/or time";
this.effectFadeOut.play(targets);
......关键组件看起来像这样:
<mx:Label text="" id="mylabel" width="100%" height="100%" x="0" y="0" color="0xff0000"/>
<mx:Canvas id="privacyScreen" width="100%" height="100%" x="0" y="0" alpha="1" backgroundColor="{myConfiguration.backgroundColor}"/>
<mx:Fade id="effectFadeIn" alphaFrom="0.0" alphaTo="1.0" duration="250"/>
<mx:Fade id="effectFadeOut" alphaFrom="1.0" alphaTo="0.0" duration="250"/>
我确信经验丰富的Flex设计师已经知道,这段代码是由美味的鲜榨 FAIL制作的。执行等待淡入效果完成的基本假设是错误的当淡入还在进行中时,淡出效果显然被忽略了。
所以我想我有两个相关的问题:
答案 0 :(得分:2)
我刚用你的代码玩了一下,这就是你要找的东西吗?
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="onComplete();">
<mx:Script>
<![CDATA[
private var targets:Array = new Array();
private function onComplete():void {
targets.push(canv);
effectFadeOut.play(targets);
}
private function onFadeInEnd():void {
effectFadeOut.play(targets);
}
private function onFadeOutEnd():void {
effectFadeIn.play(targets);
}
]]>
</mx:Script>
<mx:Label text="{(new Date()).toString()}" id="lbl" x="0" y="0" color="0xff0000"/>
<mx:Canvas id="canv" width="100%" height="{lbl.height+5}" x="0" y="0" backgroundColor="#000000"/>
<mx:Fade id="effectFadeIn" alphaFrom="0.0" alphaTo="1.0" duration="250"
effectEnd="onFadeInEnd();" />
<mx:Fade id="effectFadeOut" alphaFrom="1.0" alphaTo="0.0" duration="250"
effectEnd="onFadeOutEnd();" />
</mx:WindowedApplication>
希望有所帮助:)
答案 1 :(得分:1)
当标签消失时,您的代码将被执行。 this.effectFadeIn.play()不等待它完成。我会在稍后调用的代码行中添加一个setTimeout调用,或者更好的是,将它们放在另一个函数中。然后,在一定间隔后再次调用该函数。
import flash.utils.*;
private function FadeIn () : void {
var targets:Array = new Array();
targets.push(this.privacyScreen);
this.effectFadeIn.play(targets);
this.mylabel.text = "I am a date and/or time";
setTimeout (function (): void {FadeOut (targets);}, effectFadeIn.duration); // Function and duration
}
private function FadeOut (targets : Array) : void {
this.effectFadeOut.play(targets);
setTimeout (FadeIn (), this.effectFadeOut.duration;
}
我很确定这应该有用......