首页 > 代码库 > 关于air文件拖入加载解析的两个问题

关于air文件拖入加载解析的两个问题

因需用到拖入加载问价解析,于是第一感觉就是想到了air,经网上查到代码如下:

public class Darg extends Sprite
    {
        public function Darg ()
        {
            if (stage) {
                creat();
            }else{
                addEventListener(Event.ADDED_TO_STAGE,creat);
            }
        }
        private var _sp:Sprite = new Sprite();
        private var _format:Array = [".jpg", ".JPG",".jpeg", ".JPEG", ".gif", ".GIF",".png",".swf",".PNG"];
        protected function creat(event:Event = null):void
        {
            _sp.graphics.beginFill(0xff0000,0.5);
            _sp.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
            _sp.graphics.endFill();
            addChild(_sp);
            stage.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,ondrop);
            stage.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,ondrop);
        }
       
        private var loader:Loader = new Loader;
        protected function ondrop(event:NativeDragEvent):void
        {
            //将拖入的文件以数组形式获得,指定拖入的数据是文件数组形式
            var files:Array = event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
            //获得拖入的第一个文件
            var file:File = File(files[0]);
            switch(event.type) {
                case NativeDragEvent.NATIVE_DRAG_ENTER:
                    if(_format.indexOf(file.type) != -1){
                        NativeDragManager.acceptDragDrop(this);
                    }
                    break;
                case NativeDragEvent.NATIVE_DRAG_DROP:
                    if(_format.indexOf(file.type) != -1){
                        //删除上一张加载的图片
                        loader.unload();
                        //加载拖入的图片
                        loader.load(new URLRequest(file.url));
                        removeChild(_sp);
                        addChild(loader);
                    }
                    break;
            }
        }

 

需要注意的两个问题:

1、舞台上必须有物,就是代码中为何要加个sprite的缘故;

2、必须addChild  而不能stage.addChild,即添加到当前场景上,而不是添加到底层舞台上。如果加在舞台上可以侦听到NATIVE_DRAG_ENTER 但是无 NATIVE_DRAG_DROP事件,至于具体原因没研究过了,如若有知道的,可以发表发表。