Obsługa gestu przeciągania na zewnątrzAdobe AIR 1.0 i wersje późniejsze Aby obsłużyć gest przeciągania na zewnątrz, należy utworzyć obiekt Clipboard w odpowiedzi na zdarzenie mouseDown i wysłać go do metody NativeDragManager.doDrag(). Aplikacja może wówczas wykrywać zdarzenie nativeDragComplete obiektu inicjującego, aby określić, jaką operację wykonać, gdy użytkownik zakończy lub porzuci gest. Przygotowywanie danych do przenoszeniaAby przygotować dane lub obiekt do przeniesienia, należy utworzyć obiekt Clipboard i dodać informacje przeznaczone do przeniesienia w co najmniej jednym formacie. Programista może użyć standardowych formatów, aby przekazać dane, które można automatycznie przekształcić na macierzyste formaty schowka i formaty definiowane przez aplikacje w celu przekazania obiektów. Jeśli konwersja informacji przeznaczonych do przekazania na pewien format wymaga wielu obliczeń, można podać nazwę funkcji modułu obsługi służącej do konwersji. Funkcja zostanie wywołana tylko wtedy, gdy odbierający składnik lub aplikacja odczyta skojarzony format. Więcej informacji na temat formatów schowka zawiera sekcja Formaty danych Clipboard Poniższy przykład ilustruje sposób tworzenia obiektu Clipboard zawierającego bitmapę w kilku formatach: obiekt Bitmap, rodzimy format bitmapy oraz format listy plików zawierający plik, z którego bitmapa została pierwotnie załadowana: 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;
}
Rozpoczęcie operacji przeciągania na zewnątrzAby rozpocząć operację przeciągania, należy wywołać metodę NativeDragManager.doDrag() w odpowiedzi na zdarzenie down myszy. Metoda doDrag() jest metodą statyczną, która pobiera następujące parametry:
Poniższy przykład ilustruje jak rozpocząć operację przeciągania dla obiektu bitmapy załadowanego z pliku. Poniższy przykład ładuje obraz i, dla zdarzenia mouseDown, rozpoczyna operację przeciągania. 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);
}
}
}
Zakończenie operacji przeciągania na zewnątrzW momencie upuszczenia przez użytkownika przeciąganego elementu, zwalniając przycisk myszy, obiekt inicjatora wywołuje zdarzenie nativeDragComplete. Programista może sprawdzić właściwość dropAction obiektu zdarzenia, a następnie wykonać właściwą operację. Na przykład: jeśli operacją jest NativeDragAction.MOVE, możliwe jest usunięcie źródła z jego pierwotnej lokalizacji. Użytkownik może porzucić gest przeciągania, zwalniając przycisk myszy, gdy kursor znajduje się poza pożądanym celem upuszczania. Menedżer przeciągania ustawia właściwość dropAction porzuconego gestu na wartość NativeDragAction.NONE. |
|