作者强调,在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)){
var files
:Array = e.clipboard.getData
(ClipboardFormats.FILE_LIST_FORMAT
) as Array;
DragManager.acceptDragDrop(this);
}
}
3.需要判断一下拖拽的数据是否符合要求,如果是允许的数据格式,则执行DragManager.acceptDragDrop()方法
private function onDragDrop(e:NativeDragEvent):void{
//get the array of files being drug into the app
var arr
:Array = e.clipboard.getData
(ClipboardFormats.FILE_LIST_FORMAT
) as Array;
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 savePictureObject
(label
:String, testObject
:Object):void;
function getPictureObjectByLabel
(label
:String):ArrayCollection;
function getAllPictureObjects():ArrayCollection;
}
}
保存一个图片到数据库的时候,使用的依然是:clipboard.getData
private function onDrop(event:NativeDragEvent):void {
var airData
:Object=event.clipboard.formats;
//读取剪切板
for each(var type:String in airData
) {
if (type != "air:url") {
var airObjects
:Array=event.clipboard.getData
(type)as Array;
//获取剪切板中的数据
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();
}
}
分享到:
相关推荐
压缩包子文件的文件名“HelloWorld_Workers_For_Air.fxp”可能是一个AIR项目的文件,通常这种文件扩展名(.fxp)是Adobe Flash Professional导出的项目文件,包含了项目的所有资源、设置和源代码。开发者可以使用...
在Adobe AIR环境下运行的Flex应用同样支持拖放功能。需要注意的是,在AIR环境中实现拖放可能需要特殊的考虑,例如处理跨平台兼容性问题。 #### 十二、拖放实例 1. **例子1:用Canvas作为drop target**:演示如何...
Flex SDK包括编译器和Flex Builder IDE,可以生成SWF文件,这些文件可以在Adobe Flash Player或独立的Air环境中运行。 3. **在Flex中使用Google Map API**:在Flex项目中集成Google Map API需要引入Google Maps API...
本文档详细阐述了Ext2文件系统的核心API,主要针对Adobe AIR 1.0中的应用程序开发。EXT 2.02版本与Adobe AIR的集成是一个重要的更新,它增强了对AIR应用程序沙箱的支持,并且部分Ext组件能够独立于AIR环境使用。文档...
Flex是一种用于构建富互联网应用程序(RIA)的框架,它基于ActionScript和MXML,运行在Adobe Flash Player或Adobe AIR之上。这个项目可能包含一个或多个Flex组件,它们利用MoveManager来实现用户界面中的拖放功能。 ...
Adobe AIR允许Flex应用程序在桌面环境中运行,提供更丰富的本地系统集成能力,如访问文件系统、拖放操作等。《Flex3Cookbook中文版_AIRIA》会介绍如何使用Flex开发跨平台的桌面应用。 七、Flex应用生命周期 从初始...
Flex+不仅支持Web应用,还能创建原生应用程序,这得益于Adobe AIR技术的支持。 ### 2. MXML:Flex+的核心语言 #### 2.1 MXML简介 MXML是Flex+的主要标记语言,用于描述用户界面的布局以及应用程序的非可视化方面...
7. **xds_preview.air**:这个文件可能是Ext Designer的一个预览应用程序,可能以Adobe AIR技术实现,允许在桌面环境中离线查看和测试设计。 8. **Ext_Designer_Preview.rar**:这是一个RAR压缩文件,通常包含了Ext...
在本文中,我们将深入探讨`advancedDataGrid`的逐级展开功能,这是一个在Flex或Adobe AIR应用程序中广泛使用的高级数据网格组件。`advancedDataGrid`提供了丰富的数据展示和交互能力,特别适合处理多层次的数据结构...