2009-06-18 60 views
1

我是Flex新手,負責增強現有應用程序。其中一項增強功能是讓現在顯示時間在顯示時間和日期之間平穩淡化的時間。等待Flex效果完成

我知道這樣做的正確方法是將字體文件嵌入到應用程序中,這樣我就可以直接淡入淡出標籤。如果可以的話,我儘量避免這種情況,因爲我希望儘可能使我的更改儘可能不顯眼。

我想出了我認爲是一個合理的解決方法:創建一個「隱私屏幕」,恰好是時鐘背景的確切大小,形狀和顏色;初始化其α爲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。執行等待淡入效果完成的基本假設是錯誤的,淡入效果在淡入效果仍在進行時顯然被忽略。

所以我想我有兩個相關的問題:

  1. 是否有可能得到執行,同時等待完成運行效果暫停?
  2. 這種方法是否可行?還是僅僅是從上到下做錯了?

我很感謝任何人都可以提供的見解。

(我提前,更多的我試圖通過邊學邊做這種承認,我越來越意識到我需要利用一些在線trainingresources的自己在那裏。)

回答

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> 

希望幫助:)

+0

啊哈! 「效果結束」參數正是我需要的機制,這個示例代碼很好地展示了這個概念。你有我的感謝。 – BlairHippo 2009-06-18 22:58:30

+0

你的文章只是倖免於我一些真正的悲傷。謝謝! – noogrub 2012-06-13 15:11:56

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; 
} 

我敢肯定這應該工作...

+0

它幾乎工作。它需要一點點調整才能完成我所拍攝的內容,因爲我希望在隱私屏幕已經消失之後更改文本,但只是將文本更改移到FadeOut函數中就行。我接受了radekg對這個問題的回答,因爲它讓我感覺更加優雅,並且基於我在其他地方看到的內容,它看起來好像Adobe試圖拋棄setTimeout函數。但無論如何+1還是有幫助的;這是完美功能解決方案的核心。:-) – BlairHippo 2009-06-18 23:03:42

+0

在Flex中從未使用的效果,這是我的頭頂:-)我也來自Javascript世界,這是如何在JS中完成的。 – Aethex 2009-06-18 23:47:23