Obsługa gestu przeciągania na zewnątrz

Adobe AIR 1.0 i starsze wersje

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 przenoszenia

Aby 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ątrz

Aby 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:

Parametr

Opis

initiator

Obiekt, z którego rozpoczynane jest przeciąganie i który wywołuje zdarzenia dragStart i dragComplete . Inicjator musi być obiektem interaktywnym.

clipboard

Obiekt Clipboard zawierający dane do przenoszenia. Do obiektu Clipboard odwołują się obiekty NativeDragEvent wywoływane podczas sekwencji przeciągania i upuszczania.

dragImage

(Opcjonalnie) Obiekt BitmapData do wyświetlania podczas przeciągania. Obraz może określić wartość dla właściwości alpha . (Uwaga: System Microsoft Windows do przeciągania obrazów zawsze stosuje stałe przenikanie alfa).

offset

(Opcjonalnie) Obiekt Point określający przesunięcie obrazu przeciągania względem obszaru aktywnego myszy. Użycie ujemnych współrzędnych powoduje przesunięcie obrazu przeciągania do góry i w lewo względem kursora myszy. Jeśli przesunięcie nie zostanie określone, lewy górny róg obrazu przeciągania zostanie umieszczony w obszarze aktywnym myszy.

actionsAllowed

(Opcjonalnie) Obiekt NativeDragOptions określa, które czynności (kopiowanie, przenoszenie, łączenie) są prawidłowe dla operacji przeciągania. Jeśli żaden argument nie zostanie wprowadzony, dozwolone są wszystkie czynności. Obiekty NativeDragEvent odwołują się do obiektu DragOptions, aby umożliwić potencjalnemu celowi przeciągania sprawdzenie, czy dozwolone czynności są zgodne z przeznaczeniem docelowego składnika. Na przykład: składnik „kosz” może zaakceptować tylko gesty przeciągania, które zezwalają na czynność przenoszenia.

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ątrz

W 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 .