AIR中对于桌面系统拖拽的支持将使你的AIR应用如虎添翼。本周有两篇AIR相关的文章,都是关于拖拽的。
第一篇 - 拖拽文件到AIR并添加到DataGrid中
来自:http://sagarkulkarni.com/2009/03/31/drag-and-drop-files-in-air-add-them-to-data-grid/
作者强调,在AIR中实现拖拽操作要用到的标签就是DragManager ,实现的原理大致上是如下的步骤:
1.当用户拖拽一个文件到AIR应用,AIR应用通过侦听NativeDragEvent.NATIVE_DRAG_ENTER,捕获到拖拽事件
addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragIn);
通过侦听NativeDragEvent.NATIVE_DRAG_DROP,捕获到拖拽完成事件
addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDragDrop);
2.拖拽的数据实际上位于系统的剪切板内,所以AIR需要使用clipboard.getData方法来获取数据
private function onDragIn(e:NativeDragEvent):void{ //check and see if files are being drug in if(e.clipboard.hasFormat(ClipboardFormats.FILE_LIST_FORMAT)){ DragManager.acceptDragDrop(this); } }
3.需要判断一下拖拽的数据是否符合要求,如果是允许的数据格式,则执行DragManager.acceptDragDrop()方法
private function onDragDrop(e:NativeDragEvent):void{ //get the array of files being drug into the app uploadGrid.dataProvider = arr; }
4.由于从剪切板中获取的数据是Array格式,所以你可以直接赋给DataGrid作为数据源,在DataGrid中显示出来
第二篇 - 从桌面拖拽文件到AIR应用程序
来自:http://www.mindtheflex.com/?p=81
这篇文章的初衷与上一篇类似,不过作者设计的模式是从用户桌面上拖拽一个图片到AIR应用程序,然后AIR应用程序将它以BLOB的格式存放到数据库中(BLOB是数据库中用来存储二进制文件的字段类型)。
开始你需要创建一个主的MXML文件和一个用于存放图片的数据库(SQLite),你也手工创建,也可以通过下面的SQL语句:
CREATE TABLE IF NOT EXISTS picture_objects(id integer PRIMARY KEY autoincrement,label text, picturedata blob);
在存取数据方面,作者使用了DAO的模式,接口:
package dao { import mx.collections.ArrayCollection; public interface PictureObjectDao { function getAllPictureObjects():ArrayCollection; } }
保存一个图片到数据库的时候,使用的依然是:clipboard.getData
private function onDrop(event:NativeDragEvent):void { if (type != "air:url") { var inFile:File=airObjects[0]as File;//获取剪切板中的文件 var fileInStream:FileStream=new FileStream();//文件流 fileInStream.open(inFile, FileMode.READ); fileInStream.readBytes(contentArray);//读取字节保存到contentArray picture.source=contentArray; savePictureObject(inFile.name, contentArray);//保存到数据库 } } pictureObjectDao.savePictureObject(label, pictureObject); addedPictureObjects=pictureObjectDao.getAllPictureObjects(); } }





说到文件下载,就不能不说断点续传,大家可能用过在网页中借助Flash来实现下载进度显示的工具,这个工具只适用于文件体积不是很大的时候,用户可以非常有保障的在一定的时间内下载完成,一旦下载进程中断(网络或其它原因),用户就不得不从头开始下载文件,这对于大文件体积的情况(比如视频),就会很麻烦...
发表新评论