加载swf文件

一、问题起源

  在Flex编程的过程中,我们常常会遇到主程序过大,导致打开网页时,需要漫长等待的过程。Flex提供了一个在主程序中加载子程序的方法来规避在刚打开网页时,下载量过大的问题,Flex加载子应用程序的过程也就是本文讨论的“加载SWF”的过程。

  使用主程序加载子程序的方法的原因如下:

  • 减少主程序的体积。
  • 将某些功能封装到子应用程序中。
  • 创建可重用的子应用程序,这样能加载到不同的主程序当中。
  • 在主程序中加载第三方的应用程序。

参考:http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf619ab-7fe2.html

  加载SWF的控件有两种:Loader和SWFLoader。本文将一一介绍如何使用这两种控件来加载swf文件。

二、使用Loader加载swf文件

环境:Flash Builder 文件名:MainApplication.mxml

<?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" creationComplete="onCreationComplete(event)">
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            
            private function onCreationComplete(event:FlexEvent):void
            {
                var loader:Loader = new Loader();
                loader.load(new URLRequest("SubApplication.swf"));//加载bin-debug目录下的SubApplication.swf
                loaderContainer.addChild(loader);
            }
        ]]>
    </fx:Script>
    <mx:UIComponent id="loaderContainer" width="100%" height="100%"/>
</s:Application>

更多参考:

http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d9e.html

  虽然使用Loader可以加载SWF文件,但在布局上,Loader还是不够完美。

  设置SubApplication的backgroundColor="0xc0c0c0",构建SubApplication,覆盖MainApplication项目bin-debug中的SubApplication.swf文件。运行MainApplication.mxml。你会发现SubApplication的高宽并非100%。但使用Loader并没有设置高宽百分比的属性。Flex推荐大家使用SWFLoader来加载swf文件,让大家更加方便的加载swf和设置各种属性。

三、比较Loader和SWFLoader

  SWFLoader控件有如下特征:

  • 支持Flex样式和效果;Loader控件不支持任何样式和效果。
  • 能让你获取加载进程。如果使用Loader,你需要通过LoaderInfo对象来获取加载swf的进度。
  • SWFLoader是UIComponent。这样我们可以在mxml文件中直接使用标签,而不是as代码。
  • 可以缩放和修改加载的子程序的内容尺寸。
  • 并不一定要求SWF文件是Application的实例,它仅仅会检查是否有Application存在。
  • 支持多版本的子应用程序。Loader不支持多版本。

更多参考:

http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf619ab-7ffe.html

  使用SWFLoader加载swf文件

<?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>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <s:SWFLoader source="SubApplication.swf" maintainAspectRatio="false" height="100%" width="100%"/>
</s:Application>

说明:maintainAspectRatio属性表示swf内容是否按宽高比来缩放。

posted @ 2013-03-17 11:02  Jack Tao  阅读(400)  评论(0编辑  收藏  举报