<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- saved from url=(0014)about:internet -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>ViewTransitionsHomeView.mxml</title>
<link rel="stylesheet" type="text/css" href="../SourceStyles.css"/>
</head>

<body>
<pre><span class="MXMLComponent_Tag">&lt;s:View</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">"
        xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">"
        title="</span><span class="MXMLString">View Transitions</span><span class="MXMLDefault_Text">" viewActivate=&quot;view1_viewActivateHandler(event)&quot;</span><span class="MXMLComponent_Tag">&gt;</span>
    
    <span class="MXMLSpecial_Tag">&lt;fx:Script&gt;</span>
        &lt;![CDATA[
            <span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">collections</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">ArrayCollection</span>;
            <span class="ActionScriptReserved">import</span> <span class="ActionScriptDefault_Text">mx</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">core</span><span class="ActionScriptOperator">.</span><span class="ActionScriptDefault_Text">FlexGlobals</span>;
            
            <span class="ActionScriptReserved">import</span> spark.events.ViewNavigatorEvent;
	         <span class="ActionScriptReserved">import</span> spark.transitions.CrossFadeViewTransition;
	         <span class="ActionScriptReserved">import</span> spark.transitions.FlipViewTransition;
            <span class="ActionScriptReserved">import</span> spark.transitions.SlideViewTransition;
            <span class="ActionScriptReserved">import</span> spark.transitions.ZoomViewTransition;
            
            <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> flipTrans:FlipViewTransition = <span class="ActionScriptReserved">new</span> FlipViewTransition();
            <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> zoomTrans:ZoomViewTransition = <span class="ActionScriptReserved">new</span> ZoomViewTransition();
            <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> slideTrans:SlideViewTransition = <span class="ActionScriptReserved">new</span> SlideViewTransition();
            <span class="ActionScriptReserved">public</span> <span class="ActionScriptvar">var</span> fadeTrans:CrossFadeViewTransition = <span class="ActionScriptReserved">new</span> CrossFadeViewTransition();
            
            <span class="ActionScriptReserved">protected</span> <span class="ActionScriptfunction">function</span> view1_viewActivateHandler(event:ViewNavigatorEvent):<span class="ActionScriptReserved">void</span>
            {
                <span class="ActionScripttrace">trace</span>(<span class="ActionScriptString">"Default pop transition "</span> + FlexGlobals.topLevelApplication.navigator.defaultPopTransition);
                <span class="ActionScripttrace">trace</span>(<span class="ActionScriptString">"Default push transition"</span> + FlexGlobals.topLevelApplication.navigator.defaultPushTransition);
            }
            
        <span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptBracket/Brace">]</span><span class="ActionScriptOperator">&gt;</span>
    <span class="MXMLSpecial_Tag">&lt;/fx:Script&gt;</span>
    <span class="MXMLComponent_Tag">&lt;s:layout&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:VerticalLayout</span><span class="MXMLDefault_Text"> paddingTop="</span><span class="MXMLString">5</span><span class="MXMLDefault_Text">" paddingBottom="</span><span class="MXMLString">5</span><span class="MXMLDefault_Text">" paddingLeft="</span><span class="MXMLString">5</span><span class="MXMLDefault_Text">" paddingRight="</span><span class="MXMLString">5</span><span class="MXMLDefault_Text">" gap="</span><span class="MXMLString">15</span><span class="MXMLDefault_Text">" 
                          horizontalAlign="</span><span class="MXMLString">center</span><span class="MXMLDefault_Text">" verticalAlign="</span><span class="MXMLString">middle</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:layout&gt;</span>
    
    <span class="MXMLComponent_Tag">&lt;s:HGroup</span><span class="MXMLDefault_Text"> gap="</span><span class="MXMLString">20</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:Button</span> label="<span class="MXMLString">Fade</span>" height="<span class="MXMLString">180</span>" width="<span class="MXMLString">180</span>" click="navigator.pushView(views.SampleFade,fadeTrans)"<span class="MXMLComponent_Tag">/&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:Button</span> label="<span class="MXMLString">Flip</span>" height="<span class="MXMLString">180</span>" width="<span class="MXMLString">180</span>" click="navigator.pushView(views.SampleFlip,flipTrans)"<span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:HGroup&gt;</span>
    <span class="MXMLComponent_Tag">&lt;s:HGroup</span><span class="MXMLDefault_Text"> gap="</span><span class="MXMLString">20</span><span class="MXMLDefault_Text">"</span><span class="MXMLComponent_Tag">&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:Button</span> label="<span class="MXMLString">Slide</span>" height="<span class="MXMLString">180</span>" width="<span class="MXMLString">180</span>" click="navigator.pushView(views.SampleSlide,slideTrans)"<span class="MXMLComponent_Tag">/&gt;</span>
        <span class="MXMLComponent_Tag">&lt;s:Button</span> label="<span class="MXMLString">Zoom</span>" height="<span class="MXMLString">180</span>" width="<span class="MXMLString">180</span>" click="navigator.pushView(views.SampleZoom,zoomTrans)"<span class="MXMLComponent_Tag">/&gt;</span>
    <span class="MXMLComponent_Tag">&lt;/s:HGroup&gt;</span>  
<span class="MXMLComponent_Tag">&lt;/s:View&gt;</span></pre></body>
</html>
