加载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内容是否按宽高比来缩放。