最近做一个决策分析项目,需要使用到FLEX,而在使用的过程中,逐渐的接触到了FLASH,突然发现,用FLASH来做动画或者图表,用FLEX与JAVA后台进行交互,是一个非常方便的事情。唯一的障碍莫过于,FLEX与FLASH之间的数据交互。
其实这本身也不难,解决的方法就是通过Actionscript3.0.这需要注意的是,Flash cs5以上的版本才支持AS3.0,更以前的版本只支持AS2.0,我用的FlexBuilder是4.6,同样支持AS3.0。这样促使了As3.0可以完美的成为中间桥梁
以下代码为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,后续讲)一个数组用来存值和一个标题,如下
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来做动画,做元件等、供大家交流