Просмотр полной версии : Move transition для окна
Astraport
26.08.2012, 17:58
Хочу сделать чтобы все модальные окна в приложении появлялись из левого края двигаясь по горизонтали и останавливались по центру, а при закрытии уезжали вправо. Вроде бы все просто - меняю в кастомном скине transition для state, но окно не двигается. Fade при этом работает.
<s:Transition fromState="closed" toState="normal" autoReverse="true">
<s:Parallel target="{chrome}">
<s:Fade duration="150"/>
<s:Move duration="300" xFrom="-200" easer="{bounce}"/>
</s:Parallel>
</s:Transition>
Или это нужно анимировать не через скин? Как правильно сделать?
djyamato
26.08.2012, 21:54
а xTo="" указывать не нужно ?
Astraport
27.08.2012, 00:00
Сорри, указывал конечно. Дело не в том, нужно при создании окна поместить его за пределами stage. Или прямо в скине это сделать. Вот какая практика лучше?
djyamato
27.08.2012, 01:00
Я бы применял эффекты к компоненту.
И лэйаутом, наверняка, можно это решить
или в лоб:
<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:Move id="alertMoveIn" target="{myAlert}" xFrom="{alertInitX}" xTo="{alertCenteredX}"/>
<s:Move id="alertMoveOut"
target="{myAlert}"
xFrom="{alertCenteredX}"
xTo="{alertOutX}"
effectEnd="alertMoveOut_effectEndHandler(event)"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import components.CustomWindow;
import mx.core.UIComponent;
import mx.events.CloseEvent;
import mx.events.EffectEvent;
import mx.managers.PopUpManager;
[Bindable]
protected var myAlert:UIComponent;
[Bindable]
protected var alertInitX:int;
[Bindable]
protected var alertInitY:int;
[Bindable]
protected var alertCenteredX:int;
[Bindable]
protected var alertOutX:int;
protected function showAlertButton_clickHandler(event:MouseEvent):void
{
myAlert=new CustomWindow();
myAlert.addEventListener(CloseEvent.CLOSE,alertCloseHandler);
PopUpManager.addPopUp(myAlert,this,true);
myAlert.y=(stage.stageHeight-myAlert.height)/2;
alertCenteredX=(stage.stageWidth-myAlert.width)/2;
alertOutX=stage.stageWidth+myAlert.width;
alertInitX=-myAlert.width;
alertInitY=(stage.stageHeight-myAlert.height)/2;
alertMoveIn.play();
}
protected function alertCloseHandler(event:CloseEvent):void
{
myAlert.removeEventListener(CloseEvent.CLOSE,alertCloseHandler);
alertMoveOut.play();
}
protected function alertMoveOut_effectEndHandler(event:EffectEvent):void
{
PopUpManager.removePopUp(myAlert);
trace("alert removed");
}
]]>
</fx:Script>
<s:Button label="show alert" id="showAlertButton" click="showAlertButton_clickHandler(event)"/>
</s:Application>
CustomWindow
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="100" height="100">
<fx:Script>
<![CDATA[
import mx.events.CloseEvent;
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Rect width="100%" height="100%">
<s:stroke>
<s:SolidColorStroke color="0x000000" weight="2"/>
</s:stroke>
<s:fill>
<s:SolidColor color="0xffffff"/>
</s:fill>
</s:Rect>
<s:HGroup verticalAlign="middle" horizontalAlign="center" width="100%" height="100%">
<s:Button label="close" click="{dispatchEvent(new CloseEvent(CloseEvent.CLOSE))}"/>
</s:HGroup>
</s:Group>
Astraport
27.08.2012, 14:55
Ну ясно. Без разницы в общем.
Ещё вопросик, а что easer эффекты в MXML вообще не имеют свойств? Ну там время затухания или амплитуда.
djyamato
28.08.2012, 13:32
Имеют http://help.adobe.com/en_US/flex/using/WS91E85D63-A025-4c46-B758-A275D4D3B3FC.html
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.