2011-05-03 89 views
2

我有一個小翻滾效果問題。第一次加載一切都很好。但是,在點擊按鈕兩次(=前往studyState然後回到Sate1)後,bordercontainer上的翻轉效果停止工作。 我不知道原因可能是什麼。請給我一個提示。翻轉停止工作

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
<fx:Declarations> 
    <s:AnimateColor id="animateColorON" colorPropertyName="backgroundColor" colorFrom="#FFFFFF" colorTo="#e7eae4" duration="300"/> 
    <s:AnimateColor id="animateColorOFF" colorPropertyName="backgroundColor" colorFrom="#e7eae4" colorTo="#FFFFFF" duration="600"/> 
</fx:Declarations> 

<s:transitions> 
    <s:Transition id="t1" autoReverse="true"> 
     <s:CrossFade 
      target="{this}" 
      duration="1500" /> 
    </s:Transition> 
</s:transitions> 
<s:states> 
    <s:State name="State1" /> 
    <s:State name="studyState" /> 
</s:states> 

<s:VGroup id="globalGroup" includeIn="State1" width="100%"> 
    <s:Button label="State1 to studyState" click="this.currentState = 'studyState'" /> 
    <s:BorderContainer width="100%" height="30" cornerRadius="4" borderVisible="false" buttonMode="true" rollOverEffect="animateColorON" rollOutEffect="animateColorOFF"> 
     <s:HGroup width="100%" height="30" verticalAlign="middle" paddingLeft="5" paddingRight="5"> 
      <s:Label id="p_dob_label" text="text" width="55%"/> 
      <s:Label id="p_dob_value" text="text" width="40%" verticalAlign="top" textAlign="right" color="#8DA576"/> 
     </s:HGroup> 
    </s:BorderContainer> 
</s:VGroup> 
<s:VGroup id="studyGroup" includeIn="studyState" width="100%"> 
    <s:Button label="studyState to State1" click="this.currentState = 'State1'" /> 
</s:VGroup> 

</s:Application> 
+0

+1提供完整的運行示例。我現在正在看一看,並可以複製你描述的行爲。好像有點意外的 – JeffryHouser 2011-05-03 12:56:16

回答

2

這是一個修復。爲狀態更改時添加事件偵聽器。我用的是currentStateChangeevent:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" currentStateChange="application1_currentStateChangeHandler(event)"> 

在監聽器,手動設置rollOverEffect和rollOutEffect效果:

<fx:Script> 
    <![CDATA[ 
     import mx.events.StateChangeEvent; 

     protected function application1_currentStateChangeHandler(event:StateChangeEvent):void 
     { 
      // TODO Auto-generated method stub 
      if(bc){ 
       bc.setStyle('rollOverEffect',animateColorON); 
       bc.setStyle('rollOutEffect',animateColorOFF); 
      } 
     } 

    ]]> 
</fx:Script> 

一定要給予一個使用BorderContainer ID。我用bc:

<s:BorderContainer id="bc" width="100%" height="30" cornerRadius="4" borderVisible="false" buttonMode="true" rollOverEffect="animateColorON" rollOutEffect="animateColorOFF" > 

我不確定爲什麼這些效果會丟失。我最好的理論是,這與ActionScript在後臺如何生成有關。儘管rollOverEffect和rollOutEffect看起來是組件上的屬性,但它們實際上是作爲樣式在幕後實現的。我敢打賭,出於某種原因,切換狀態時'效果'風格不會被重置。儘管如此,您必須查看生成的ActionScript以瞭解確切信息。

+0

謝謝,它的作品! 雖然我對此仍有點困惑。 – Adam 2011-05-03 19:01:06

+0

只是找到了一個更簡單的方法: 我只需要修改這樣的使用BorderContainer: 側翻=「bgcolorOver(事件)」卷展欄=「bgcolorOut(事件)」 ,然後用這兩種功能,我只需要發揮作用: animateColorON.play([evt.currentTarget]); 使用這種方法,我可以在多個項目上使用彩色動畫,不必爲它們提供唯一的id-s,而且我根本不必聽狀態更改! ,它改變狀態後工作。 – Adam 2011-05-03 20:33:03