Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Flex 4: States a Transitions

V minulém díle jsme se seznámili se základy Flexu a ActionScriptu a předvedli si vytvoření jednoduché aplikace v tomto frameworku. Dnes si řekneme něco o interních stavech aplikace a přechodech mezi nimi.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Pomocí stavů můžeme definovat logické části či sekce aplikace, a následně se na ně můžeme odkazovat a přepínat mezi nimi. Není v tom žádná věda, a opět, jak je při vývoji ve Flexu zvykem, existují postupy, jak mechanickou práci zautomatizovat. Zde stačí použít panel States, a pak jen ovlivňovat vlastnosti komponent v tom kterém stavu, potřebný kód generuje Flash Builder automaticky na pozadí.

Flex 4 - díl 2

Podobné nastavení lze do kódu zapsat takto:

<s:states>
    <s:State name="Uvod"/>
    <s:State name="Editor"/>
    <s:State name="Napoveda"/>
</s:states>

Definice stavů aplikace

Dříve se ve Flexu (do verze 3) definovaly stavy pomocí <states> a tagu <State>, kam šlo ručně vkládat komponenty pomocí AddChild, odebírat pomocí RemoveChild, měnit vlastnosti pomocí SetProperty a styly pomocí SetStyle. Tento způsob lze použít stále, ale Flex 4 přichází s novou metodou, která byla přidána na žádost vývojářské komunity.

Nově lze pouze nadefinovat jména stavů, a k nim následně přiřadit komponenty pomocí parametru includeIn a excludeFrom a měnit vlastnosti pomocí tečkové notace.

Pokud chceme zobrazit nějaké tlačítko pouze ve stavu Uvod, stačí napsat:

<s:Button includeIn="Uvod" />

Analogicky – pokud ho chceme zobrazit ve všech stavech, vynecháme includeIn a excludeFrom  úplně:

<s:Button/>

Pokud jej chceme ve stavu Uvod a Napoveda, a nikoliv ve stavu Editor, tak můžeme zvolit dva způsoby. Buď vyjmenovat stavy, v nichž se má tlačítko zobrazit:

<s:Button includeIn="Uvod,Napoveda"/>

nebo komplementárně určit stavy, v nichž se zobrazit nemá:

<s:Button excludeFrom="Editor"/>

Vlastnosti komponenty pouze v určitém stavu pak měníme pomocí tečkové notace. Následující kód říká: ve stavu Uvod přesuň x pozici na 100 a ve stavu Editor x na 10 a y na 150, jinak nech x na 10 a y na 50.

<s:Button x="10" y="50" x.Uvod="100" x.Editor="10" y.Editor="150"/>

Zkusme si nyní se stavy trochu pohrát. V následujícím kódu jsou 3 komponenty:

  • tlačítko, které mění pozici v závislosti na stavu
  • popisek s názvem aktuálního stavu
  • ComboBox na přepínání stavů

Všimněte si, že stav, v němž je aplikace spuštěna (start state), je nastaven na hodnotu Uvod pomocí  currentState="Uvod".

<?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" currentState="Uvod">
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            import spark.events.IndexChangeEvent;

            protected function combobox1_changeHandler(event:IndexChangeEvent):void
            {
                currentState = states[event.newIndex].name;
            }

        ]]>
    </fx:Script>
    <s:states>
        <s:State name="Uvod"/>
        <s:State name="Editor"/>
        <s:State name="Napoveda"/>
    </s:states>
    <s:Button id="btn" x="10" y="50" label="Button" x.Uvod="100" x.Editor="10" y.Editor="150"/>
    <s:ComboBox y="8" right="10" dataProvider="{new ArrayCollection(states)}" labelField="name" selectedIndex="0" hange="combobox1_changeHandler(event)"/>
    <s:Label x="10" y="10" text="{currentState}"/>
</s:Application>
</pre>

ComboBox při vybrání jiné položky vyvolá událost combobox1_changeHandler, která se automaticky vygenerovala ve Flash Builderu. Stačí do ComboBoxu připsat atribut change (a ENTERem spustit generování handleru). Lze také jít přes panel Properties, v události Change kliknout na symbol blesku a zvolit Generate Event Handler.

Flex 4 - díl 2

Flex 4 - díl 2

Přechody mezi stavy

Mezi stavy aplikace lze přecházet pomocí přechodů (transitions), které jsou definovány v tagu <s:transitions>.

Zkuste do naší aplikace přidat následující kód:

<s:transitions>
    <s:Transition id="myTransition" fromState="*" toState="*" effect="{mover}" />
</s:transitions>

a do do deklarací efekt Move:

<fx:Declarations>
    <s:Move id="mover" duration="3000" targets="{btn}" />
</fx:Declarations>

Zajistí, že se při přechodu mezi stavy tlačítko btn přesune plynule za dobu 400 milisekund. Přechodu můžeme ještě nadefinovat easing – průběh animace (křivku). Všechny easingy pro Flex 4 najdete v balíčku spark.effects.easing. Standardně máte k dispozici např: Bounce, Elastic, Linear, Sine, ale může to být i vlastní třída implementující rozhraní IEaser.

Zajímavostí je, že třeba Wipe a CrossFade jsou shader filtry implementované pomocí jazyka Pixel Bender, optimalizovaného pro transformaci bitmap.

Zkusme použít filtr Bounce:

<fx:Declarations>
    <s:Bounce id="bounce" />
    <s:Move id="mover" duration="3000" targets="{btn}" easer="{bounce}"/>
</fx:Declarations>

(Mimo Move je k dispozici řada dalších přechodů, jako například Rotate, Scale, Resize, Move3D, Fade  – a mnohé další. Další informace o přechodech naleznete např. v popisu k balíčku  spark.effects.)

Když budeme chtít například nechat plynule zmizet nebo zobrazit některé prvky při změně stavu, můžeme k tomu využít efekt Fade. Zkusme si, jen pro zajímavost, upravit náš příklad tak, aby používal Fade a alpha.

Pokud chceme použít dva efekty zároveň, zabalíme je do tagu  Parallel:

<fx:Declarations>
    <s:Parallel id="parallel" target="{btn}">
        <s:Move id="mover" duration="3000"  />
        <s:Fade id="fader" duration="1000" />
    </s:Parallel>
</fx:Declarations>

Tlačítku btn pak nastavíme v jednotlivých stavech různé průhlednosti  alpha.

<s:Button id="btn" x="10" y="50" label="Button"
 x.Uvod="100" x.Editor="10" y.Editor="500"
 alpha="0" alpha.Uvod="1" alpha.Editor="0.6"
 alpha.Napoveda="0.1"/>

Na závěr musíme ještě změnit parametr a do atributu effect napsat ID našeho nového efektu:  effect="{parallel}"

autoReverse=„tru­e“

Určite nastane situace, kdy je potřeba spustit přechod ve chvíli, kdy nebyl předchozí ještě dokončen, a proto je potřeba pokračovat z místa, kde jste právě skončili. K tomu slouží vlastnost přechodu autoReverse. Přepněte ji na true a zkuste, jak se příklad bude chovat s ní a bez.

TIB2012

       

Animate

Třída Animate je základem pro ostatní efekty. Umožní vám „animovat“ jakoukoliv proměnnou – např. pozici ScrollBaru. V podstatě naprosto cokoliv – fantazii se zde meze nekladou. Velmi užitečným zdrojem pro získání dalších informací je blog Codedependent a související Adobe TV Codedendent show, kde Chet Haase (senior computer scientist pro Flex) ukazuje pokročilejší triky s přechody, Flexem apod. Doporučit lze např. videotutorial Animating a TextArea.

AnimateTransi­tionShader

Pomocí této třídy lze animovat Pixel Bender shadery. Podrobnější popis by opět byl mimo rozsah článku, proto doporučuji zájemcům o tuto problematiku stáhnout si nějaký filtr z Pixel Bender Exchange a vyzkoušet jej. Příklad naleznete i v dokumentaci Flex 4.

Odkazy:

Tom Krcha

Tom Krcha

Tom Krcha (blog, twitter) zastává pozici Gaming Evangelist v Adobe Systems.

Školení Google+ pro firmy

DW - Školení PPC
  • Jak využít Google+ pro firemní komunikaci a marketing.
  • Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
  • Jak využít Google+ v souladu s pravidly užívání.
  • Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.

Detailní informace o školení Google+ »

Přehled názorů

ako to vyzera
Peter Rybar 1. 2. 2010 19:01
Nový
└ 
Re: ako to vyzera
pf 1. 2. 2010 22:19
Nový
 
├ 
Re: ako to vyzera
Peter Rybar 2. 2. 2010 02:13
Nový
 
│
└ 
Re: ako to vyzera
pf 2. 2. 2010 11:05
Nový
 
│
 
└ 
Re: ako to vyzera
Peter Rybar 2. 2. 2010 17:48
Nový
 
│
 
 
└ 
Re: ako to vyzera
pf 2. 2. 2010 20:10
Nový
 
├ 
Re: ako to vyzera
Pavel Šimek 2. 2. 2010 10:38
Nový
 
│
└ 
Re: ako to vyzera
pf 2. 2. 2010 11:58
Nový
 
│
 
├ 
Re: ako to vyzera
pf 2. 2. 2010 12:08
Nový
 
│
 
└ 
Re: ako to vyzera
Pavel Šimek 2. 2. 2010 13:38
Nový
 
│
 
 
├ 
Re: ako to vyzera
Martin Malý 2. 2. 2010 14:05
Nový
 
│
 
 
│
└ 
Re: ako to vyzera
Pavel Šimek 2. 2. 2010 15:11
Nový
 
│
 
 
│
 
└ 
Re: ako to vyzera
Peter Rybar 2. 2. 2010 17:47
Nový
 
│
 
 
│
 
 
└ 
Re: ako to vyzera
Pavel Šimek 2. 2. 2010 18:04
Nový
 
│
 
 
└ 
Re: ako to vyzera
aprilchild 2. 2. 2010 15:28
Nový
 
│
 
 
 
├ 
Re: ako to vyzera
pf 2. 2. 2010 16:25
Nový
 
│
 
 
 
└ 
Re: ako to vyzera
Pavel Šimek 2. 2. 2010 17:17
Nový
 
└ 
Re: ako to vyzera
Erender 1. 3. 2010 14:46
Nový
Občasník?
-tom- 2. 2. 2010 10:59
Nový
└ 
Re: Občasník?
Tom Krcha 2. 2. 2010 14:05
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem