本文出自http://www.jiangzone.com.cn/,如需轉載,請註明出處!
在Flex裏面不像在Flash裏面隨意製作動畫了,Flex更趨向於應用程序,而不是動畫製作了,所以沒有了時間軸的概念。在Flex中使用動畫效果,可以用Flex自帶的Effect,或者自已定製Effect,因爲很多人都想借Flash裏面的一樣操作Flex,比如在Flash裏面做一個動態按鈕很容易,當鼠標移動到上面時,會有很多發光的點跑出來(熒火蟲效果),這種效果在Flash十分容易實現,但在Flex裏面要實現這種效果就不是那麼簡單的了,下面說說在Flex裏的的動務效果的使用與自定義製作。
首先介紹一下Flex裏面的自帶的效果有以下幾種:
Blur 模糊效果
Move 移動效果
Fade 淡入淡出效果
Glow 發光效果
Resize 調整大小效果
Rotate 旋轉效果
Zoom 縮放效果
WipeLeft 用遮罩實現畫面收放效果,下同,分別爲不同方向
WipeRight
WipeUp
WipeDown
不同的效果所需要設置的屬性也不一樣,比如Blur效果需要設置它的X與Y軸的模糊像素
<mx:Blur id="blur" blurXFrom="0" blurXTo="10" />
而Move效果需要設置移動的位置信息
<mx:Move id="moveEffect" xFrom="-100" />
其它設置可以參考Flex語言參考
下面說說如何使用這些效果。要運行這些效果有兩種方法:一種是調用該效果的play()方法,另外一種是使用觸發器來觸發效果。
(1)使用play()方法:
CODE:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
private function onClick(event:Event):void {
be.target = event.currentTarget;
be.play( );
}
]]>
</mx:Script>
<mx:Blur id="be" blurXTo="50" blurYTo="50" duration="1000" />
<mx:Panel id="p" width="200" height="180" click="onClick(event)" />
</mx:Application>
在代碼中看到,要使用效果,先定好一個效果,如上面的<mx:Blur ...>該標籤就是模糊效果的MXML標籤,定好效果後在Panel的點擊事件裏再對該效果進行一些設置,如be.target = event.currentTarget 設置該效果將要應用到的目標組件(Component),之後再調用play()方法後,該效果就會應用在Panel上面播放!
(2)使用觸發器播放效果:
使用觸發器播放效果的話,可以不用寫ActionScript代碼,直接在組件的效果觸發器上指明使用哪個效果就可以了,比較簡單明瞭,但就不能進行更多的屬性定製,而用AS控制播放的話,可以對效果進行很多的設置再相應根據情況播放,先看看觸發器播放的代碼:
CODE:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
<mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" />
</mx:Application>
看以上代碼,先寫好了Blur的效果並設置好屬性後,duration="2000"這個是播放的時間以毫秒爲單位。
在Panel標籤裏有這樣一句:creationCompleteEffect="{be}" 這個就是觸發器,是該Panel組件的效果觸發器,當Panel組件加載完成時,會由系統自動調用該效果觸發器,觸發器裏面指了觸發 be 這個Blur效果
在Flex裏面還有很多觸發器如:
addedEffect 被添加進容器時觸發效果
removedEffect 被從容器中移除時觸發效果
creationCompleteEffect 被創建成功時觸發效果
focusInEffect 獲得焦點時觸發
focusOutEffect 失去焦點時觸發
hideEffect 被隱藏時(visible=false)觸發
showEffect 被顯示時(visible=true)觸發
rollOverEffect 鼠標經過時觸發
rollOutEffect 鼠標離開時觸發
mouseDownEffect 鼠標按下時觸發
mouseUpEffect 鼠標鬆開時觸發
moveEffect 被移動時觸發
resizeEffect 被重整大小時觸發
注意:這些都是效果觸發器,不要與事件觸發器混亂了。事件觸發器是rollOver,事件觸發器與效果觸發器差不多,事件觸發器是當用戶執行相就操作時觸發事件,將會調用自定的事件觸發處理函數,而效果觸發器是執行相應操作時被觸發並由系統自動調用所定的效果的play()方法。
現在說說效果的一些其它屬性:
每個效果都有reverse( );方法,該方法是反向播放,原本由小到大的變化,而調用reverse( );後再運行play()的話,效果將會從大到小進行播放。
但要注意的一點是,reverse( );不會自動播放,即是單單調用reverse( );的話,效果並不會播放,他只會記錄該效果爲倒轉,而要再調用play()後倒轉效果纔會開始播放。而調用pause( )與resume( )就是暫停與繼續播放效果
startDelay這個屬性是設置效果的播放延時,以毫秒爲單位,即要等待多少毫秒後效果纔開始播放,如:
<mx:Blur id="be" blurXTo="50" startDelay="3000" />
該模糊效果將會在調用play()之後3秒纔開始播放
repeatCount這個屬性是設置效果的重複次數,默認爲1,設置爲0的話就是不停循環播放
<mx:Blur id="be" blurXTo="50" startDelay="3000" repeatCount="5" />
每個效果都有兩個事件:effectStart 與 effectEnd
你可以在該效果事件的處理函數裏面對效果作相應的操作,如:
[複製到剪貼板]
CODE:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.events.EffectEvent;
public function onEffEnd(e:EffectEvent):void{
e.effectInstance.reverse();
e.effectInstance.play();
}
]]>
</mx:Script>
<mx:Blur id="be" blurXTo="50" blurYTo="50" duration="2000" />
<mx:Panel id="p" width="200" height="180" creationCompleteEffect="{be}" effectEnd="onEffEnd(event)" />
</mx:Application>
當效果播放完時,系統將會自動觸發effectEnd事件,在處理函數裏面,將該效果Instance即現時播放的效果實例進行倒轉並播放,當播放完,又會觸發effectEnd事伯,這樣一直循環!
現在再來說說效果的組合:
通常如果你覺得只應用一個效果很單調的話,可以進行效果組合應用,即多個效果同時播放或者順序播放,
如,當加載頁面時,你想Panel先模糊到一定程度,再將Panel移動到某個位置,再把Panel還原成原來的清淅度(即消退模糊)。這樣分析一下,一共用了三個效果,一,先應用Blur(由清至模)效果,當Blur完成時,再應用Move效果,當Move完成時,再應用另外一個Blur(由模至清)效果。這樣三個效果組合就是按順序組合,先後運行。
CODE:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Sequence id="sequenceEffect">
<mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
<mx:Move id="mv" xTo="200" yTo="150" duration="500" />
<mx:Blur id="beIn" blurXFrom="50" blurYFrom="50" blurXTo="0" blurYTo="0" duration="500" />
</mx:Sequence>
<mx:Panel id="p" width="200" height="180" mouseDownEffect="sequenceEffect" />
</mx:Application>
看以上代碼,<mx:Sequence id="sequenceEffect">標籤就是順序組合效果標籤,當應用sequenceEffect效果的時候,它會按順序播放該標籤裏面的三個子效果。
另外的就是同時播放了,
CODE:
<mx:Parallel id="parallelEffect">
<mx:Blur id="beOut" blurXTo="50" blurYTo="50" duration="500" />
<mx:Move id="mv" xTo="200" yTo="150" duration="500" />
</mx:Parallel>
這個標籤就是同時播放的效果標籤,放在它裏面的子效果都會同時播放,即一邊模糊一邊移動。這個都可以自由組合,<mx:Parallel>與<mx:Sequence>標籤都可以自由組合,例如先按順序先播放模糊,再同時播放移動與隱藏等。這裏就不多說了。