Основы перетаскивания в AIR

Adobe AIR 1.0 и более поздних версий

Краткое разъяснение и примеры кодов с перетаскиванием в приложении AIR см. в следующих статьях краткого руководства на Adobe Developer Connection:

API-интерфейс перетаскивания содержит следующие классы.

Пакет

Классы

flash.desktop

Константы, используемые с API-интерфейсом перетаскивания, определены в следующих классах:

flash.events

NativeDragEvent

Этапы перетаскивания

Жест перетаскивания включает три этапа:

Начало
Пользователь начинает операцию перетаскивания, удерживая кнопку мыши и перетаскивая объект из компонента или элемента компонента. Компонент-источник обычно выступает в качестве инициатора перетаскивания и отправляет события nativeDragStart и nativeDragComplete . Приложение Adobe AIR начинает операцию перетаскивания вызовом метода NativeDragManager.doDrag() в ответ на событие mouseDown или mouseMove .

Если операция перетаскивания начинается извне приложения AIR, отсутствует объект-инициатор для обработки событий nativeDragStart или nativeDragComplete .

Перетаскивание
Удерживая кнопку мыши, пользователь переводит курсор на другой компонент, приложение или рабочий стол. Во время выполнения перетаскивания его инициатор отправляет события nativeDragUpdate . (Однако это событие не отправляется в AIR for Linux.) Когда пользователь наводит указатель мыши на возможную цель перетаскивания в приложении AIR, целевой элемент отправляет событие nativeDragEnter . Обработчик событий может исследовать объект события, чтобы определить, принимает ли целевой элемент формат перетаскиваемых данных, и, если это так, разрешить пользователю оставить там данные, вызвав метод NativeDragManager.acceptDragDrop() .

Пока жест перетаскивания выполняется над интерактивным объектом, этот объект непрерывно отправляет события nativeDragOver . Когда жест выходит за границы интерактивного объекта, тот отправляет событие nativeDragExit .

Отпускание
Пользователь отпускает кнопку мыши в границах возможного целевого элемента. Если целью является приложение или компонент AIR, то целевой объект отправляет событие nativeDragDrop . Обработчик событий имеет доступ к данным, переданным от объекта события. Если цель лежит за пределами AIR, то отпускание обрабатывается операционной системой или другим приложением. В обоих случаях объект-инициатор отправляет событие nativeDragComplete (если перетаскивание начинается в границах AIR).

Класс NativeDragManager отвечает как за жест «перетаскивания из», так и за жест «перетаскивания в». Все члены класса NativeDragManager являются статическими, поэтому экземпляры этого класса создавать не нужно.

Объект Clipboard

Данные, перетаскиваемые из приложения или компонента или обратно, сохраняются в объекте Clipboard. Один объект Clipboard может поддерживать различные представления одних и тех же данных, тем самым расширяя диапазон приложений, которые смогут распознавать и использовать эти данные. Например, изображение может храниться в виде данных изображения, сериализованного объекта и файла. Визуализация данных в определенном формате может задерживаться до вызова функции визуализации, а та не вызывается, пока не будут считаны данные.

После начала жеста перетаскивания доступ к объекту Clipboard может быть получен только из обработчика событий nativeDragEnter , nativeDragOver и nativeDragDrop . После окончания перетаскивания объект Clipboard не может быть считан или повторно использован.

Объект приложения может быть передан в качестве ссылки и в качестве сериализованного объекта. Ссылки действительны только в границах исходного приложения. Сериализованные объекты могут передаваться от одного приложения AIR к другому, но использовать их можно только с объектами, которые остаются действительными в результате сериализации и десериализации. Сериализованные объекты преобразуются в формат ActionScript 3 (AMF3) — формат передачи строковых данных.

Работа с инфраструктурой Flex

В большинстве случаев при создании приложений Flex рекомендуется использовать API-интерфейс перетаскивания Adobe® Flex™. Инфраструктура Flex предлагает идентичный набор функций, когда приложение Flex выполняется в среде AIR (с использованием AIR NativeDragManager). Flex поддерживает меньший набор функций, когда компонент или приложение выполняется в среде обозревателя с более строгими ограничениями. Классы AIR нельзя использовать в компонентах или приложениях, выполняющихся за пределами рабочей среды AIR.