Поддержка жеста «перетаскивания из»Adobe AIR 1.0 и более новых версий Для поддержки жеста перетаскивания необходимо создать объект Clipboard в ответ на событие mouseDown и отправить его методу NativeDragManager.doDrag(). Затем приложение может прослушивать событие nativeDragComplete на объекте-инициаторе, чтобы определить, какое действие необходимо выполнить, когда пользователь завершит или остановит действие. Подготовка данных для передачиЧтобы подготовить данные к перетаскиванию, создайте объект Clipboard и добавьте информацию, которую необходимо передать в одном или нескольких форматах. Для передачи данных можно использовать стандартные форматы, которые автоматически переводятся в исходные форматы буфера обмена, или форматы, заданные приложениями для передачи объектов. Если перевод в определенный формат требует слишком много вычислительной мощности, то для выполнения преобразования можно передать имя функции обработчика. Функция вызывается только в том случае, если компонент или приложение-получатель распознают связанный формат. Дополнительные сведения о форматах буфера обмена см. в разделе «Форматы данных Clipboard». В примере ниже показано, как создавать объект Clipboard, содержащий растровое изображение в нескольких форматах: объект Bitmap, исходный формат растрового изображения и формат списка файлов, содержащего файл, из которого изображение изначально загружается: import flash.desktop.Clipboard;
import flash.display.Bitmap;
import flash.filesystem.File;
public function createClipboard(image:Bitmap, sourceFile:File):Clipboard{
var transfer:Clipboard = new Clipboard();
transfer.setData("CUSTOM_BITMAP", image, true); //Flash object by value and by reference
transfer.setData(ClipboardFormats.BITMAP_FORMAT, image.bitmapData, false);
transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false);
return transfer;
}
Начало операции «перетаскивания из»Для начала операции перетаскивания нужно вызвать метод NativeDragManager.doDrag() в ответ на нажатие кнопки мыши. Метод doDrag() является статическим и принимает ряд параметров:
В примере ниже показано, как начинать операцию перетаскивания для растрового изображения, загруженного из файла. В примере изображение загружается, а по событию mouseDown начинается его перетаскивание. package
{
import flash.desktop.NativeDragManager;
import mx.core.UIComponent;
import flash.display.Sprite;
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.net.URLRequest;
import flash.geom.Point;
import flash.desktop.Clipboard;
import flash.display.Bitmap;
import flash.filesystem.File;
import flash.events.Event;
import flash.events.MouseEvent;
public class DragOutExample extends UIComponent Sprite {
protected var fileURL:String = "app:/image.jpg";
protected var display:Bitmap;
private function init():void {
loadImage();
}
private function onMouseDown(event:MouseEvent):void {
var bitmapFile:File = new File(fileURL);
var transferObject:Clipboard = createClipboard(display, bitmapFile);
NativeDragManager.doDrag(this,
transferObject,
display.bitmapData,
new Point(-mouseX,-mouseY));
}
public function createClipboard(image:Bitmap, sourceFile:File):Clipboard {
var transfer:Clipboard = new Clipboard();
transfer.setData("bitmap",
image,
true);
// ActionScript 3 Bitmap object by value and by reference
transfer.setData(ClipboardFormats.BITMAP_FORMAT,
image.bitmapData,
false);
// Standard BitmapData format
transfer.setData(ClipboardFormats.FILE_LIST_FORMAT,
new Array(sourceFile),
false);
// Standard file list format
return transfer;
}
private function loadImage():void {
var url:URLRequest = new URLRequest(fileURL);
var loader:Loader = new Loader();
loader.load(url,new LoaderContext());
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
}
private function onLoadComplete(event:Event):void {
display = event.target.loader.content;
var flexWrapper:UIComponent = new UIComponent();
flexWrapper.addChild(event.target.loader.content);
addChild(flexWrapper);
flexWrapper.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
}
}
Завершение «перетаскивания из»Когда пользователь отпускает перетаскиваемый объект, отпуская кнопку мыши, объект-инициатор отправляет событие nativeDragComplete. Можно проверить свойство dropAction объекта события, а затем выполнить нужное действие. Например, при действии NativeDragAction.MOVE исходный элемент может быть удален из своего начального местоположения. Пользователь может прекратить перетаскивание, отпустив кнопку мыши за пределами целевой области. Диспетчер перетаскивания задает свойству dropAction действия прекращения значение NativeDragAction.NONE. |
|