加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读