Supporto del movimento di trascinamento verso esterno

Adobe AIR 1.0 e versioni successive

Per supportare il movimento di trascinamento verso esterno, è necessario creare un oggetto Clipboard in risposta a un evento mouseDown e inviarlo al metodo NativeDragManager.doDrag() . L'applicazione è in grado quindi di intercettare l'evento nativeDragComplete sull'oggetto promotore per determinare quale azione intraprendere quando l'utente completa o sospende il movimento.

Preparazione di dati per trasferimento

Per preparare dati o un oggetto da trascinare, creare un oggetto Clipboard e aggiungere le informazioni da trasferire in uno o più formati. È possibile utilizzare i formati di dati standard in modo da passare dati che possano essere trasferiti automaticamente a formati di appunti nativi e a formati definiti dall'applicazione per passare oggetti.

Se richiede notevoli risorse di calcolo per convertire le informazioni da trasferire in un formato particolare, è possibile fornire il nome della funzione di gestore per eseguire la conversione. La funzione viene chiamata se, e solo se, il componente o l'applicazione ricevente legge il formato associato.

Per ulteriori informazioni sui formati degli appunti, vedete Formati di dati degli Appunti .

L'esempio seguente mostra come creare un oggetto Clipboard contenente un bitmap in numerosi formati: un oggetto Bitmap, un formato bitmap nativo e un formato di elenco file contenente il file da cui è stato caricato originariamente il bitmap:

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; 
}

Avvio dell'operazione di trascinamento verso esterno

Per avviare un'operazione di trascinamento, chiamate il metodo NativeDragManager.doDrag() in risposta a un evento di pressione mouse. Il metodo doDrag() è un metodo statico che assume i seguenti parametri:

Parametro

Descrizione

initiator

L'oggetto da cui ha origine il trascinamento e che invia gli eventi dragStart e dragComplete . Il promotore deve essere un oggetto interattivo.

clipboard

L'oggetto Clipboard contenente i dati da trasferire. Si fa riferimento all'oggetto Clipboard negli oggetti NativeDragEvent inviati durante la sequenza di trascinamento.

dragImage

(Opzionale) Un oggetto BitmapData per la visualizzazione durante il trascinamento. L'immagine può specificare un valore alpha . (Nota: Microsoft Windows applica sempre una dissolvenza alpha fissa per il trascinamento delle immagini).

offset

(Opzionale) Un oggetto Point che indica l'offset dell'immagine trascinata dal punto attivo del mouse. Utilizzate coordinate negative per spostare l'immagine di trascinamento verso l'alto e a sinistra in base al cursore del mouse. Se non viene fornito alcun offset, l'angolo superiore sinistro dell'immagine è posizionato nel punto attivo del mouse.

actionsAllowed

(Opzionale) Un oggetto NativeDragOptions che indica quali azioni (copia, spostamento o collegamento) sono valide per l'operazione di trascinamento. Se non viene fornito alcun argomento, è possibile eseguire tutte le azioni. Si fa riferimento all'oggetto DragOptions in oggetti NativeDragEvent al fine di abilitare una potenziale destinazione di trascinamento per controllare che le azioni consentite siano compatibili con lo scopo del componente di destinazione. Ad esempio, un componente "cestino" potrebbe accettare solo i movimenti di trascinamento che consentono l'azione di spostamento.

L'esempio seguente mostra come avviare un'operazione di trascinamento per un oggetto bitmap a partire da un file: L'esempio carica un'immagine e, su un evento mouseDown , avvia l'operazione di trascinamento.

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); 
    } 
} 
}

Completamento di un trasferimento di trascinamento verso esterno

Quando un utente rilascia l'elemento trascinato rilasciando il mouse, l'oggetto promotore invia un evento nativeDragComplete . È possibile verificare la proprietà dropAction dell'oggetto evento e intraprendere l'azione appropriata. Ad esempio, se l'azione è NativeDragAction.MOVE , è possibile rimuovere l'elemento originario dalla posizione originaria. L'utente può sospendere un movimento di trascinamento rilasciando il pulsante del mouse mentre il cursore si trova all'esterno di un'idonea destinazione di rilascio. Il gestore di trascinamento imposta la proprietà dropAction di un movimento sospeso per NativeDragAction.NONE .