flex 使用自定义事件
发布时间:2020-12-15 05:11:03 所属栏目:百科 来源:网络整理
导读:1,由于FLEX图片有跨域问题。所以我采用LORDER先把图片加载到内存中的bitmapdata对象,再对它操作,这样可发避免跨域问题。但由于网络环境问题,其实这是个异步的操作,即只须加载完成,才对它处理。那么怎么做个异步WAIT呢,用事件触发。 代码如下。 ///这
1,由于FLEX图片有跨域问题。所以我采用LORDER先把图片加载到内存中的bitmapdata对象,再对它操作,这样可发避免跨域问题。但由于网络环境问题,其实这是个异步的操作,即只须加载完成,才对它处理。那么怎么做个异步WAIT呢,用事件触发。 代码如下。 ///这是个为避免跨域问题加载图片的类。 package components { import event.IEvent; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Loader; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.net.URLRequest; import flash.system.LoaderContext; import mx.controls.Alert; import mx.core.UIComponent; ///要使一个类,有分派事件的能力,要 extends EventDispatcher public class LoadPics extends EventDispatcher { private var lc:LoaderContext = new LoaderContext(); private var loader:Loader = new Loader(); private var bitmapdata:BitmapData; public function LoadPics(imgUrls:String) { //注册加载完成后处理事件。。 loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadImage_over); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,failure_over); loader.load(new URLRequest(imgUrls),lc); }; /*** * * 加载完成,把图片信息放入到内存bitmapdata对象。。 * 触发事件。让上层做具体的业务处理。。 * ***/ private function loadImage_over(e:Event):void { var bitmap:DisplayObject; try { bitmap= loader.content; } catch (err:SecurityError) { loader.loadBytes(loader.contentLoaderInfo.bytes);//有沙箱问题就转化为二进制数据再次载入 return; } bitmapdata= new BitmapData(bitmap.width,bitmap.height); bitmapdata.draw(bitmap); //IEvent 你自己定义的事件。一般要EXTENDS EVENT dispatchEvent(new IEvent()); }; public function getBitmapdata():BitmapData{ return this.bitmapdata; } private function failure_over(e:IOErrorEvent):void { Alert.show("加载图片出错:"+e.text); }; } }在MXML中你可以。作如下调用 /*** * 抓取原图片。 * **/ protected function button1_clickHandler(event:MouseEvent):void { ///imgUrl.text image url ldp=new LoadPics(imgUrl.text); //捕获下层的图片加载完成,并已放入内存的事件信息。 //进入showImage方法作出业务处理 ldp.addEventListener(IEvent.EventName,showImage); } ?? ??? ???? /*** ?? ??? ??? ? * 处理图片 ?? ??? ??? ? * 这里只是显示 ?? ??? ??? ? * ***/ ???? ??? ???? protected? function showImage(event:IEvent):void{ ?? ??? ??? ???? ///这时对?? ??? ??? ??? ?srcImg.source或者ldp.getBitmapdata()的操作就不存在跨域问题了 ?? ??? ??? ??? ?srcImg.source=ldp.getBitmapdata(); ?? ??? ??? ?} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |