注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无线时代辐射无穷

抓紧生宝宝,小心辐射

 
 
 

日志

 
 

flex4.5基于andorid移动开发时的swf加载器  

2011-06-08 15:17:23|  分类: flex |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第一步:建立加载类[CtmObjLoader],此类可以加载文件类型 [图片文件或swf文件]

package 

{

 import flash.display.DisplayObject;

 import flash.display.Loader;

 import flash.events.*;

 import flash.net.URLRequest;

 

 import mx.core.UIComponent;

 public class CtmObjLoader extends UIComponent

 {

  private var ProgressHandle:Function=null;

  public var loader:Loader;

  public var _bLoaded:Boolean=false;

  public var _bShow:Boolean=true;

  //@UrlRequest  加载的地址

  //@progressHandle 加载中的处理过程

  //bShow  加载后是否显示出来  

  public function CtmObjLoader(UrlRequest:String=null,progressHandle:Function=null,bShow:Boolean=true)

  {

   super();

   if(UrlRequest)LoadThis(UrlRequest,progressHandle,bShow);

  }

  public function LoadThis(UrlRequest:String,progressHandle:Function=null,bShow:Boolean=true):void{

   RemoveChild();

            loader = new Loader();

            _bShow=bShow;

            ProgressHandle=progressHandle;

            configureListeners(loader.contentLoaderInfo);

            if(_bShow)addChild(loader);//如果需要显示,则addchild

            var request:URLRequest = new URLRequest(UrlRequest);

            loader.load(request);    

  }

  public function UnLoadThis():void{

   try{

    RemoveChild();

    this.parent.removeChild(this);

   }catch(e:Error){}

   //this=null;  

  }

  public function get content():DisplayObject{

   if(!_bLoaded)return null;

   return loader.content;

  }

  public function RemoveChild():void{

            if(_bLoaded){

             try{

              DeleteListeners(loader.contentLoaderInfo);

              loader.unload();

              if(_bShow)removeChild(loader);

              loader=null;

              _bLoaded=false;

             }catch(e:Error){throw new Error('Define ObjLoader Remove Error')}

            }  

  }

        private function configureListeners(dispatcher:IEventDispatcher):void {

            dispatcher.addEventListener(Event.COMPLETE, completeHandler);

            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);

            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            if(ProgressHandle!=null)dispatcher.addEventListener(ProgressEvent.PROGRESS, ProgressHandle);

                  

        }

        private function DeleteListeners(dispatcher:IEventDispatcher):void {

            if(dispatcher.hasEventListener(Event.COMPLETE))dispatcher.removeEventListener(Event.COMPLETE, completeHandler);

            if(dispatcher.hasEventListener(HTTPStatusEvent.HTTP_STATUS))dispatcher.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);

            if(dispatcher.hasEventListener(IOErrorEvent.IO_ERROR))dispatcher.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            if(dispatcher.hasEventListener(ProgressEvent.PROGRESS))

             if(ProgressHandle!=null)dispatcher.removeEventListener(ProgressEvent.PROGRESS, ProgressHandle);         

        }

        private function completeHandler(event:Event):void {

         this.width=loader.content.width;

         this.height=loader.content.height;

         _bLoaded=true;         

         dispatchEvent(new Event(Event.COMPLETE));

        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {

         dispatchEvent(new Event(HTTPStatusEvent.HTTP_STATUS));

        }

        private function ioErrorHandler(event:IOErrorEvent):void {

   dispatchEvent(new Event(IOErrorEvent.IO_ERROR));

        }

 

 }

}

第二步:建立加载[flash as3 swf文件]类

//此类专提供flash as3 swf文件加载,flex swf不需要,当然也可以写成一个类,我习惯这样

package 

{

 import flash.display.MovieClip;

 

 public class mySwfLoader extends CtmObjLoader

 {

  public function mySwfLoader(UrlRequest:String=null, progressHandle:Function=null, bShow:Boolean=true)

  {

   

   super(UrlRequest, progressHandle, bShow);

  }

  public function get movieClip():MovieClip{

   if(!_bLoaded)return null

   return content as MovieClip;

  }

  

 }

}

第三步:建立flex主文件1[mainforflex.mxml]加载flex swf外部文件用

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="ManageView.*" fontSize="12">

 <mx:Script>

  <![CDATA[

   import Package.mySwfLoader;

   /*

   Flex 控制加载外部的swf文件[子文件为flex版]

   */

   import mx.managers.SystemManager;

   import mx.controls.Alert;

   import Package.CtmObjLoader;

   import flash.utils.setTimeout;

   [Bindable]private var _CtmObjLoader:mySwfLoader;

   private var LoadedSM:SystemManager;

   private var loadedMoiveClip:MovieClip;

   private function LoadSwf():void{

    LoadedSM=null;

    loadedMoiveClip=null;

    if(_CtmObjLoader){

     _CtmObjLoader.LoadThis('flexchild.swf');//child.swf自己定义去吧

    }else{

    

     _CtmObjLoader=new mySwfLoader('flexchild.swf');

     _CtmObjLoader.addEventListener(IOErrorEvent.IO_ERROR,OnFailHandle);

     _CtmObjLoader.addEventListener(Event.COMPLETE,OnCompleteHandle);

     this.addChild(_CtmObjLoader);

    }

    _CtmObjLoader.setStyle('horizontalCenter',0);

    _CtmObjLoader.setStyle('verticalCenter',0);    

   }

   private function OnFailHandle(e:Event):void{

    mx.controls.Alert.show('error');

   }

   private function OnCompleteHandle(E:Event):void{

    LoadedSM=SystemManager(_CtmObjLoader.content);

   }  

   private function OnTestCall(e:Event):void{

    Alert.show('Child Event Call');

   }   

   private function MCtestCall():void{

    if(LoadedSM){

     try{

      LoadedSM.document.TestCall('From Parent Call');//TestCall为加载的文件public函数

      

     }catch(e:Error){

      Alert.show(e.message);

     }

    }else{

     Alert.show('请加载文件');

     return;

    }

   }

   private function testAddChildListener():void{

    if(!_CtmObjLoader)

    try{

     LoadedSM.document.addEventListener("EventGoTOParent",OnTestCall);

     Alert.show('设置成功');

    }catch(e:Error)

   }

  ]]>

 </mx:Script>

 <mx:Button label="加载flex子文件" click="LoadSwf();" x="26" y="10"/>

 <mx:Button label="为加载的文件设置Listener" click="testAddChildListener();" x="150" y="10"/>

 <mx:Button label="测试加载的文件函数" click="MCtestCall();" x="342" y="10"/>

</mx:Application>

第四步:建立flex swf子文件[flexchild.mxml]

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="750" height="444"

  applicationComplete="initApp()" styleName="Border3" fontSize="12">

<mx:Script>

 <![CDATA[

  import mx.controls.Alert;

  private function initApp():void{

  

  }

  public function TestCall(msg:String):void{

   mx.controls.Alert.show(msg);

  }

  private function EventGoToParent():void{

   dispatchEvent(new Event('EventGoTOParent'));

  }

    

 ]]>

</mx:Script>

 <mx:Button x="327" y="148" label="向Parent通知事件" click="EventGoToParent()"/>

 

</mx:Application>

运行试试,加载flex swf文件完成,下面讲加载flash cs3 swf文件吧

第一步:建立flex主文件1[mainforflash.mxml]加载flash cs3 swf外部文件用

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="ManageView.*" fontSize="12">

 <mx:Script>

  <![CDATA[

   /*

   Flex 控制加载外部的swf文件[子文件为flash cs3 版]

   */

   import mx.controls.Alert;

   import Package.mySwfLoader;

   import flash.utils.setTimeout;

   [Bindable]private var _mySwfLoader:mySwfLoader;

   private var LoadedSM:MovieClip;

   private function LoadSwf():void{

    if(_mySwfLoader){

     _mySwfLoader.LoadThis('flashchild.swf');//flashchild.swf你自己去写了,我不太会,但我做了一个简单的,可用的

    }else{

    

     _mySwfLoader=new mySwfLoader('flashchild.swf');

     _mySwfLoader.addEventListener(IOErrorEvent.IO_ERROR,OnFailHandle);

     _mySwfLoader.addEventListener(Event.COMPLETE,OnCompleteHandle);

     this.addChild(_mySwfLoader);

    }

    _mySwfLoader.setStyle('horizontalCenter',0);

    _mySwfLoader.setStyle('verticalCenter',0);    

   }

   private function OnFailHandle(e:Event):void{

    mx.controls.Alert.show('error');

   }

   private function OnCompleteHandle(E:Event):void{

    if(_mySwfLoader.content)Alert.show('ok0');

    try{

     LoadedSM=_mySwfLoader.movieClip;

    }catch(e:Error)

   }  

   private function OnTestCall(e:Event):void{

    Alert.show('Child Event Call');

   }   

   private function gotoAndPlay(frame:int=0):void{

    //(_CtmObjLoader.loader.content as MovieClip).

    if(LoadedSM){

     try{

      LoadedSM.gotoAndPlay(frame);

      

     }catch(e:Error){

      Alert.show(e.message);

     }

    }else{

     Alert.show('请加载文件');

     return;

    }

   }

   private function stop():void{

    if(LoadedSM){

     try{

      LoadedSM.stop();

      

     }catch(e:Error){

      Alert.show(e.message);

     }

    }else{

     Alert.show('请加载文件');

     return;

    }    

   }

   private function play():void{

    if(LoadedSM){

     try{

      LoadedSM.play();

      

     }catch(e:Error){

      Alert.show(e.message);

     }

    }else{

     Alert.show('请加载文件');

     return;

    }    

   }   

   private function testAddChildListener():void{

    if(!_mySwfLoader)

    var d:DisplayObject=_mySwfLoader.content;

    try{

     LoadedSM.addEventListener("EventGoTOParent",OnTestCall);

     Alert.show('设置成功');

    }catch(e:Error)

    //_Url=urltxt.text;

   }

  ]]>

 </mx:Script>

 <mx:Button label="加载flash子文件" click="LoadSwf();" x="26" y="10"/>

 <mx:Button label="为加载的文件设置Listener" click="testAddChildListener();" x="160" y="10"/>

 <mx:Button label="测试加载的文件函数gotoAndPlay(0)" click="gotoAndPlay(int(frametxt.text));" x="351" y="10"/>

 <mx:TextInput id="frametxt" x="623" y="10" width="63"/>

</mx:Application>

第二步:写flash cs3 文件,这个不在行,我写了个简单的测试,通过 的,所以你就自己写吧

可以调用flash cs3 文件的函数,也可以监听他发来的事件


  评论这张
 
阅读(1176)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017