最近作一个决策分析项目,须要使用到FLEX,而在使用的过程当中,逐渐的接触到了FLASH,忽然发现,用FLASH来作动画或者图表,用FLEX与JAVA后台进行交互,是一个很是方便的事情。惟一的障碍莫过于,FLEX与FLASH之间的数据交互。数组
其实这自己也不难,解决的方法就是经过Actionscript3.0.这须要注意的是,Flash cs5以上的版本才支持AS3.0,更之前的版本只支持AS2.0,我用的FlexBuilder是4.6,一样支持AS3.0。这样促使了As3.0能够完美的成为中间桥梁app
如下代码为FLEX端测试
<?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="application1_creationCompleteHandler(event)"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; private var flexArr:Array = new Array(); protected function swfLoader_completeHandler(event:Event):void { // flash加载完成后,传入参数 Object(swfLoader.content).InitApp(this,this.flexArr,"交互测试"); } protected function application1_creationCompleteHandler(event:FlexEvent):void { this.flexArr.push(1111,2222,3333,4444); swfLoader.source="flash/RecComp.swf"; } ]]> </fx:Script> <s:SWFLoader source="" id="swfLoader" width="190" height="373" left="100" top="100" complete="swfLoader_completeHandler(event)" /> </s:Application>
从上面代码能够看出,FLEX调用了一个RecComp.swf的Flash文件,在这个swf中,要写一个InitApp方法,传入一个对象(供FLASH调用FLEX,后续讲)一个数组用来存值和一个标题,以下flex
import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField; stop(); var flexApp:Object; function InitApp(ap:Object,aarFlex:Array,titleMsg:String):void { this.flexApp = ap; var array:Array = new Array(); var rec1:Rec1 = new Rec1(); var rec2:Rec2 = new Rec2(); var rec3:Rec3 = new Rec3(); var rec4:Rec4 = new Rec4(); var rec5:Rec5 = new Rec5(); var rec6:Rec6 = new Rec6(); var rec7:Rec7 = new Rec7(); var rec8:Rec8 = new Rec8(); array.push(rec1,rec2,rec3,rec4,rec5,rec6,rec7,rec8); var format:TextFormat = new TextFormat("微软雅黑",22,"0x663300"); format.bold="bold"; format.align = "center"; var tf:TextField=new TextField(); tf.height=30; tf.width=100; tf.x=12.15; tf.y=47.3; tf.text=titleMsg; tf.setTextFormat(format); addChild(tf); for(var i:int=0;i<aarFlex.length;i++){ array[i].x=15; array[i].y=300 - 35*i; var recInfo:RecInfo=new RecInfo(); recInfo.x=155; recInfo.y=300 - 35*i - 3; recInfo.titleInfo.text=aarFlex[i]+"人"; addChild(array[i]); addChild(recInfo); setChildIndex(array[i],i+1); } }
function InitApp(ap:Object,aarFlex:Array,titleMsg:String):void 这个方法为主要接收参数。至于里面别的代码,是我本身作的无件,与交互不相关。这个组件我会发至网盘,里面还包含了经过Flash来作动画,作元件等、供你们交流动画