iteye是个高手云集的地方,作为刚步入工作的我,在这发表技术文章,压力是灰常的大,嘿嘿,请大家不要喷我,给新人一个发展的空间,也非常欢迎大家能够批评指正。
一、flex应用程序加载flash动画,主要有两种方式:
1.通过标签
<mx:SWFLoader id="swfLoader" source="@Embed('assets/images/gongshangbgnew.swf')" />
2.通过类来加载
swfLoginLoader:SWFLoader = new SWFLoader();
swfLoginLoader.load("assets/images/login-new.swf");
//将整个swf都加载到flex舞台上
this.addElement(swfLoginLoader);
这两种方式还是又差别的,具体的我还没有琢磨透彻,只是通过调试,能够实现了就好。
二、flex与flash的通信:
1.在flex应用程序中获取flash的元件,比如按钮,文本框之类的,然后对其进行操作,赋值或者添加事件等等。
//加载登陆窗口,注意要等到事件完成以后才能够获取对应的元件
private function loaderLoginWindow(event:Event):void{
swfLoginLoader.addEventListener(Event.COMPLETE,swfLoadComplete);
//加载登陆窗口
swfLoginLoader.load("assets/images/login-new.swf");
swfLoginLoader.x=300;
swfLoginLoader.y=180;
}
//加载登陆窗口完成后
private function swfLoadComplete(e:Event):void{
/**
* 将整个swf都加载到flex舞台上
* 此方法将每个flex要用的资源做成单独的swf,需要时才加载进来
*/
this.addElement(swfLoginLoader);
swf = swfLoginLoader.content as MovieClip;
//获取按钮添加事件
swf.loginBtn.addEventListener(MouseEvent.CLICK,doLogin);
swf.userName.addEventListener(KeyboardEvent.KEY_DOWN,loginnameKeydown);
swf.password.addEventListener(KeyboardEvent.KEY_DOWN,passwordKeydown);
swf.closeBtn.addEventListener(MouseEvent.CLICK,doClose);
stage.focus=swf.userName;
}
2.在flash里边通过编程,添加事件广播,然后在flex应用程序中接收该广播事件。
flash里边的编程:
//提交按钮 来广播一个 事件给Flex
subBtn.addEventListener(MouseEvent.CLICK,sendToFlexHandler);
function sendToFlexHandler(evt:MouseEvent):void
{
//广播了test事件
dispatchEvent(new Event("test"));
}
flex里边的接收代码:
//加载登陆窗口的swf初始化事件
private function init(event:FlexEvent):void{
swfLoader.content.addEventListener("test",loaderLoginWindow);
}
这是我写的代码贴出来大家分享分享
<?xml version="1.0" encoding="utf-8"?> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="900" height="800" fontSize="12" cornerRadius="3" showCloseButton="false" paddingBottom="0" paddingLeft="0" paddingRight="0" paddingTop="0" xmlns:ns1="*" modalTransparency="0" modalTransparencyColor="#FFFFFF" xmlns:ns2="com.ylzinfo.widget.*" xmlns:YLZMap="com.ylzinfo.widget.YLZMap.*" creationComplete="init(event)" headerHeight="0"> <mx:Script> <![CDATA[ import com.ylzinfo.commons.Globals; import com.ylzinfo.local.LoginContext; import com.ylzinfo.net.RemoteService; import com.ylzinfo.net.RequestEntity; import com.ylzinfo.net.ResponseEntity; import com.ylzinfo.net.trans.ZReportTransmitter; import com.ylzinfo.sysmanager.SystemUtil; import com.ylzinfo.sysmanager.entity.Sysorg; import com.ylzinfo.sysmanager.entity.Sysrole; import com.ylzinfo.sysmanager.entity.Sysuser; import com.ylzinfo.util.MD5; import mx.controls.Alert; import mx.controls.SWFLoader; import mx.core.Application; import mx.core.FlexGlobals; import mx.core.UIComponent; import mx.events.FlexEvent; import mx.managers.FocusManager; import mx.managers.PopUpManager; import mx.managers.SystemManager; import mx.rpc.AbstractOperation; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; private var swfLoginLoader:SWFLoader = new SWFLoader(); private var swf:MovieClip; //窗口弹出调用的方法 public static function show():LoginWindow{ var login:LoginWindow=LoginWindow(PopUpManager.createPopUp( Application.application as DisplayObject, LoginWindow , true)); PopUpManager.centerPopUp(login); //居中 return login; } //加载登陆窗口的swf初始化事件 private function init(event:FlexEvent):void{ swfLoader.content.addEventListener("Login",loaderLoginWindow); } //加载登陆窗口 private function loaderLoginWindow(event:Event):void{ swfLoginLoader.addEventListener(Event.COMPLETE,swfLoadComplete); //加载登陆窗口 swfLoginLoader.load("assets/images/login-new.swf"); swfLoginLoader.x=300; swfLoginLoader.y=180; } //加载登陆窗口完成后 private function swfLoadComplete(e:Event):void{ /** * 将整个swf都加载到flex舞台上 * 此方法将每个flex要用的资源做成单独的swf,需要时才加载进来 */ this.addElement(swfLoginLoader); swf = swfLoginLoader.content as MovieClip; //获取按钮添加事件 swf.loginBtn.addEventListener(MouseEvent.CLICK,doLogin); swf.userName.addEventListener(KeyboardEvent.KEY_DOWN,loginnameKeydown); swf.password.addEventListener(KeyboardEvent.KEY_DOWN,passwordKeydown); swf.closeBtn.addEventListener(MouseEvent.CLICK,doClose); stage.focus=swf.userName; } private function doClose(event:MouseEvent){ this.removeChild(swfLoginLoader); } private function doLogin(event:MouseEvent){ if(swf.userName.text==null || swf.userName.text==''){ Alert.show("用户名不能为空","提示"); swf.userName.setFocus(); return; } if(swf.password.text==null || swf.password.text==''){ Alert.show("密码不能为空","提示"); swf.password.setFocus(); return; } var id:String=swf.userName.text; var ps:String=MD5.getInstance().getMD5(swf.password.text); var params:Array=new Array(); params["username"]=id; params["passwd"]=ps; var rs:RemoteService=new RemoteService(Globals.SERVICE_LOGIN,"正在验证用户信息......"); rs.sendParameter(params,onLoginResult,null); } private function onLoginResult(res:ResponseEntity):void{ if(res.type=="data"){ //登陆成功 //关闭登陆对话框 close(); Application.application.loadComplete(); //显示加载窗体 //加载菜单 SystemUtil.loadFunctions(); //保存登陆参数 var user:Sysuser=new Sysuser(); var roles:Array=new Array(); var org:Sysorg=new Sysorg(); var rows=res.datas; for(var i=0;i<rows.length;i++){ if(rows[i].username!=undefined && rows[i].username!=null && rows[i].username!=''){ user.userid=rows[i].userid; user.username=rows[i].username; user.passwd=rows[i].passwd; user.realname=rows[i].realname; user.orgid=rows[i].orgid; } if(rows[i].orgid!=undefined && rows[i].orgid!=null && rows[i].orgid!='' && rows[i].orgname!=undefined && rows[i].orgname!=null && rows[i].orgname!='' ){ org.orgid=rows[i].orgid; org.orgname=rows[i].orgname; org.parent=rows[i].parent; } if(rows[i].roleid!=undefined && rows[i].roleid!=null && rows[i].roleid!='' ){ var role:Sysrole=new Sysrole(); role.roleid=rows[i].roleid; role.rolename=rows[i].rolename; role.orgid=rows[i].orgid; roles.push(role); } } user.sysorg=org; user.sysroles=roles; //设置登陆环境变量 LoginContext.loginname=user.username; LoginContext.userid=user.userid; LoginContext.password=user.passwd; LoginContext.realname=user.realname; LoginContext.sessionid=res.sessionid; SystemUtil.currentUser=user; //加载编码 SystemUtil.reloadSyscode(); //SystemUtil.loadLocalDB(); //加载用户产用菜单 SystemUtil.loadUserMenu(); //加载统计报表 SystemUtil.loadReports(); //加载公告 SystemUtil.loadBulletin(); //处理即时通讯 FlexGlobals.topLevelApplication.imsLogin(); }else{ //username.setSelection(0,passwd.text.length); } } private function loginnameKeydown(e:KeyboardEvent){ var code=e.keyCode; if(code==9){ stage.focus=swf.password; } } private function passwordKeydown(e:KeyboardEvent){ var code=e.keyCode; if(code==9){ stage.focus=swf.loginBtn; } } public function close():void{ PopUpManager.removePopUp(this); } ]]> </mx:Script> <mx:SWFLoader id="swfLoader" source="@Embed('assets/images/gongshangbgnew.swf')" width="950" height="650"/> </mx:TitleWindow>