flex 使用自定义事件

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();
            }




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值