在 AIR 中拖放的基本概念
Adobe AIR 1.0 以及更新的版本
如需在 AIR 應用程式中使用拖放功能的快速說明與程式碼範例,請到 Adobe Developer Connection 參閱下列快速入門文章:
拖放 API 包含下列類別。
拖放手勢階段
拖放手勢包括三個階段:
- 起始
- 使用者按住滑鼠按鈕,同時從組件或組件中的項目進行拖曳,以起始拖放作業。拖曳的項目其來源組件通常是指定做為拖曳初始程式,而且會傳送 nativeDragStart 和 nativeDragComplete 事件。Adobe AIR 應用程式基於回應 mouseDown 或 mouseMove 事件而呼叫 NativeDragManager.doDrag() 方法,以開始拖曳作業。
如果拖曳作業是從 AIR 應用程式外部起始,就不會有傳送 nativeDragStart 或 nativeDragComplete 事件的初始程式物件。
- 拖曳
- 使用者按住滑鼠按鈕的同時,將滑鼠游標移至另一個組件、應用程式或桌面上。只要拖曳動作還在進行,初始程式物件就會一直傳送 nativeDragUpdate 事件。(但在 Linux 版 AIR 中不會傳送此事件。) 當使用者將滑鼠移至 AIR 應用程式中可能的放下目標上方時,放下目標就會傳送 nativeDragEnter 事件。事件處理常式可以檢查事件物件,判斷拖曳的資料是否為該目標所接受的格式;如果是,則呼叫 NativeDragManager.acceptDragDrop() 方法而讓使用者能在目標上放下資料。
只要拖曳手勢仍停留在互動式物件上方,該物件將一直傳送 nativeDragOver 事件。當拖曳手勢離開互動式物件時,物件則會傳送 nativeDragExit 事件。
- 放下
- 使用者在可行的放下目標上方放開滑鼠。如果此目標是 AIR 應用程式或組件,該目標物件就會傳送 nativeDragDrop 事件。事件處理常式可以透過事件物件來存取傳輸的資料。如果目標位於 AIR 外部,則交由作業系統或另一個應用程式處理放下動作。在這兩種情況下,初始物件會傳送 nativeDragComplete 事件 (若拖曳動作是從 AIR 內部開始)。
拖入手勢和拖出手勢都是由 NativeDragManager 類別所控制。NativeDragManager 類別的所有成員均為靜態,因而請勿建立此類別的實體。
Clipboard 物件
經由拖曳而進出應用程式或組件的資料是包含在 Clipboard 物件內。單一 Clipboard 物件可以提供同一份資訊的不同表示形式,從而使其它應用程式便於理解與取用該份資料。例如,提供的影像可同時包括影像資料、經過序列化的 Bitmap 物件和檔案等形式。等到要讀取特定格式的資料時再呼叫顯示函數,便能達到延遲顯示資料的目的。
一旦拖曳手勢開始,要存取 Clipboard 物件就只能從 nativeDragEnter、nativeDragOver 和 nativeDragDrop 事件的事件處理常式中著手。在拖曳手勢結束後,即無法讀取或重複使用 Clipboard 物件。
應用程式物件能以參考形式及經過序列化的物件形式傳輸。參考形式只有在來源應用程式內才有效。經過序列化的物件則可在各個 AIR 應用程式之間傳輸,但只能與序列化或還原序列化期間仍為有效的物件搭配使用。經過序列化的物件會轉換成以字串為基礎的資料傳輸格式,亦即 Action Message Format for ActionScript 3 (AMF3)。
使用 Flex 架構
在大部分的情況下,建置 Flex 應用程式時最好使用 Adobe® Flex™ 拖放 API。Flex 架構針對執行於 AIR 中的 Flex 應用程式提供了相應的功能集 (此架構內部即是使用 AIR NativeDragManager)。Flex 也保有一套限制較多的功能集,以因應在更嚴謹的瀏覽器環境下執行應用程式或組件之需要。您無法在執行於 AIR 執行階段環境外的組件或應用程式中使用 AIR 類別。