Obsługa gestu przeciągania do wewnątrz

Adobe AIR 1.0 i starsze wersje

Aby obsłużyć gest przeciągania do wewnątrz, aplikacja (a zazwyczaj graficzny składnik aplikacji) musi odpowiadać na zdarzenia nativeDragEnter lub nativeDragOver .

Kroki typowej operacji przeciągania

Poniższa sekwencja zdarzeń jest charakterystyczna dla operacji przeciągania:

  1. Użytkownik przeciąga obiekt schowka nad składnik.

  2. Składnik wywołuje zdarzenie nativeDragEnter .

  3. Moduł obsługi zdarzenia nativeDragEnter analizuje obiekt zdarzenia, aby sprawdzić dostępne formaty danych oraz dozwolone operacje. Jeśli składnik może obsłużyć przeciąganie, wywoływana jest metoda NativeDragManager.acceptDragDrop() .

  4. NativeDragManager zmienia kursor myszy, aby wskazać, że obiekt można upuścić.

  5. Użytkownik upuszcza obiekt nad składnikiem.

  6. Odbierający składnik wywołuje zdarzenie nativeDragDrop .

  7. Odbierający składnik odczytuje dane w pożądanym formacie z obiektu Clipboard w obiekcie zdarzenia.

  8. Jeśli gest przeciągania został rozpoczęty w aplikacji AIR, wówczas inicjujący obiekt interaktywny wywołuje zdarzenie nativeDragComplete . Jeśli gest rozpoczęty został poza środowiskiem AIR, nie jest przesyłana żadna informacja zwrotna.

Potwierdzanie gestu przeciągania do wewnątrz

W momencie przeciągnięcia elementu schowka do obwiedni składnika graficznego składnik ten wywołuje zdarzenia nativeDragEnter i nativeDragOver . Aby określić, czy składnik może zaakceptować element schowka, moduły obsługi tych zdarzeń mogą sprawdzić właściwości clipboard oraz allowedActions obiektu zdarzenia. Aby zasygnalizować, że składnik może zaakceptować upuszczanie, moduł obsługi zdarzenia musi wywołać metodę NativeDragManager.acceptDragDrop() , przekazując odwołanie do odbierającego składnika. Jeśli więcej niż jeden zarejestrowany detektor zdarzenia wywoła metodę acceptDragDrop() , ostatni moduł zdarzenia na liście otrzymuje pierwszeństwo. Wywołanie acceptDragDrop() pozostanie poprawne, dopóki mysz nie opuści granic obiektu przyjmującego, wywołując zdarzenie nativeDragExit .

Jeśli w parametrze allowedActions przekazanym do metody doDrag() dozwolona jest więcej niż jedna operacja, użytkownik może wskazać, przytrzymując klawisz modyfikatora, która z dozwolonych operacji ma zostać wykonana. Menedżer przeciągania zmienia obraz kursora, aby poinformować użytkownika o tym, jaka operacja zostanie wykonana w chwili upuszczenia. Zamierzona operacja zgłaszana jest przez właściwość dropAction obiektu NativeDragEvent. Zestaw operacji gestu przeciągania ma tylko charakter informacyjny. Składniki związane z przesyłaniem muszą implementować właściwe zachowanie. Aby zakończyć na przykład operację przesuwania, inicjator przeciągania może usunąć przeciągany element, a cel upuszczania może go dodać.

Cel przeciągania może ograniczyć operację upuszczania do jednej z trzech możliwych operacji ustawiając właściwość dropAction klasy NativeDragManager. Jeśli użytkownik spróbuje wybrać inną operację za pomocą klawiatury, wówczas NativeDragManager wyświetli niedostępny kursor. Właściwość dropAction należy ustawić w modułach obsługi obu zdarzeń: nativeDragEnter i nativeDragOver .

Poniższy przykład ilustruje moduł obsługi zdarzeń dla zdarzenia nativeDragEnter lub nativeDragOver . Ten moduł obsługi akceptuje jedynie gesty przeciągania do wewnątrz, jeśli przeciągany schowek zawiera dane w formacie tekstowym.

import flash.desktop.NativeDragManager; 
import flash.events.NativeDragEvent; 
 
public function onDragIn(event:NativeDragEvent):void{ 
    NativeDragManager.dropAction = NativeDragActions.MOVE; 
    if(event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)){ 
        NativeDragManager.acceptDragDrop(this); //'this' is the receiving component 
    } 
}

Zakończenie upuszczania

W momencie upuszczenia przez użytkownika przeciąganego elementu na obiekt interaktywny, który zaakceptował gest, obiekt interaktywny wywołuje zdarzenie nativeDragDrop . Moduł obsługi dla tego zdarzenia może pobrać dane z właściwości clipboard obiektu zdarzenia.

Jeśli schowek zawiera format zdefiniowany dla aplikacji, parametr transferMode przekazany do metody getData() obiektu Clipboard określa, czy menedżer przeciągania zwraca odwołanie lub serializowaną wersję obiektu.

Poniższy przykład ilustruje moduł obsługi zdarzenia dla zdarzenia nativeDragDrop :

import flash.desktop.Clipboard; 
import flash.events.NativeDragEvent; 
 
public function onDrop(event:NativeDragEvent):void { 
    if (event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)) { 
    var text:String = 
        String(event.clipboard.getData(ClipboardFormats.TEXT_FORMAT,  
                                    ClipboardTransferMode.ORIGINAL_PREFERRED)); 
}

Po zakończeniu działania modułu obsługi zdarzenia obiekt Clipboard staje się obiektem nieważnym. Jakakolwiek próba uzyskania dostępu do obiektu lub jego danych spowoduje wygenerowanie błędu.

Aktualizowanie formy graficznej składnika

Składnik może aktualizować swoją formę graficzną w oparciu o zdarzenia NativeDragEvent. Poniższa tabela opisuje typy zmian, które typowy składnik wykona w odpowiedzi na różne zdarzenia:

Zdarzenie

Opis

nativeDragStart

Inicjujący obiekt interaktywny może użyć zdarzania nativeDragStart , aby dostarczyć graficznej informacji zwrotnej mówiącej o tym, że gest przeciągania pochodzi z obiektu interaktywnego.

nativeDragUpdate

Inicjujący obiekt interaktywny może użyć zdarzania nativeDragUpdate, aby zaktualizować swój stan podczas wykonywania gestu. (To zdarzenie nie istnieje w środowisku AIR dla platformy Linux).

nativeDragEnter

Potencjalny, odbierający obiekt interaktywny może użyć tego zdarzenia, aby przyjąć obszar aktywności lub wskazać w sposób graficzny, że może/nie może zaakceptować upuszczanie.

nativeDragOver

Potencjalny, odbierający obiekt interaktywny może użyć tego zdarzenia, aby odpowiedzieć na ruch myszy w obiekcie interaktywnym, na przykład, gdy mysz znajdzie się w obszarze „aktywnym” złożonego składnika (np. mapa ulic).

nativeDragExit

Potencjalny, odbierający obiekt interaktywny może użyć tego zdarzenia, aby przywrócić swój stan, gdy gest przeciągania przesunie się poza jego obwiednię.

nativeDragComplete

Inicjujący obiekt interaktywny może użyć tego zdarzenia, aby zaktualizować swój skojarzony model danych np. przez usunięcie pozycji z listy i przywrócić swoją formę graficzną.

Wyświetlanie położenia myszy podczas gestu przeciągania do wewnątrz

Przytrzymanie gestu przeciągania nad składnikiem powoduje, że składnik ten wywołuje zdarzenia nativeDragOver . Zdarzenia wywoływane są co kilka milisekund, a także przy każdym przesunięciu myszy. Obiekt zdarzenia nativeDragOver może być używany do określania położenia myszy nad składnikiem. Dostęp do położenia myszy może być użyteczny w sytuacjach, w których odbierający składnik jest złożony, ale nie obejmuje podskładników. Na przykład, jeśli aplikacja wyświetla bitmapę zawierającą mapę ulic i obszary mapy mają być podświetlane w chwili przeciągania na nie informacji przez użytkownika, wówczas do wyświetlania położenia myszy na mapie można użyć współrzędnych myszy zgłaszanych w zdarzeniu nativeDragOver .