Compatibilidad con el gesto de arrastrar hacia fuera

Adobe AIR 1.0 y posterior

Para tener compatibilidad con el gesto de arrastrar hacia fuera hay que crear un objeto Clipboard como respuesta a un evento mouseDown y enviarlo al método NativeDragManager.doDrag() . La aplicación puede entonces detectar el evento nativeDragComplete en el objeto iniciador para determinar qué medidas tomar cuando el usuario finalice o abandone el gesto.

Preparación de datos para la transferencia

Para preparar datos o un objeto para arrastrarlos, cree un objeto Clipboard y añada la información a transferirse en uno o varios formatos. Para pasar datos que pueden traducirse automáticamente a formatos nativos del portapapeles se pueden utilizar formatos de datos estándar; para pasar objetos, pueden utilizarse formatos definidos por la aplicación.

Si la conversión en un formato determinado de la información a transferirse requiere mucho procesamiento, se puede indicar el nombre de una función de controlador para que realice la conversión. La función se llama únicamente si el componente o la aplicación de recepción puede leer el formato asociado.

Para obtener más información sobre los formatos de portapapeles, consulte Formatos de datos para Clipboard .

El siguiente ejemplo muestra cómo se crea un objeto Clipboard que contiene un mapa de bits en diversos formatos: un objeto Bitmap, un formato de mapa de bits nativo y un formato de lista de archivos que contiene el archivo desde el que se cargó originalmente el mapa de bits:

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

Inicio de una operación de arrastrar hacia fuera

Para iniciar una operación de arrastrar, llame al método NativeDragManager.doDrag() como respuesta a un evento mouseDown. El método doDrag() es un método estático que admite los parámetros siguientes:

Parámetro

Descripción

initiator

El objeto en el cual origina la acción de arrastrar y que distribuye los eventos dragStart y dragComplete . El iniciador debe ser un objeto interactivo.

clipboard

El objeto Clipboard que contiene los datos a transferirse. Hay referencias al objeto Clipboard en los objetos NativeDragEvent distirbuidos durante la secuencia de arrastrar y colocar.

dragImage

(Opcional) Un objeto BitmapData para mostrar durante la operación de arrastrar. La imagen puede especificar un valor alpha . (Nota: Microsoft Windows aplica siempre un difuminado alfa fijo a las imágenes arrastradas).

offset

(Opcional) Un objeto Point que especifica el desplazamiento de la imagen arrastrada desde la zona interactiva del ratón. Para mover la imagen hacia arriba y hacia la izquierda en relación con el cursor del ratón, utilice coordenadas negativas. Si no se indica ningún desplazamiento, la esquina superior izquierda de la imagen arrastrada se coloca en la zona interactiva del ratón.

actionsAllowed

(opcional) Un objeto NativeDragOptions que especifica qué acciones (copiar, mover o vincular) son válidas para la operación de arrastrar. Si no se proporciona ningún argumento, se admiten todas las acciones. Se hace referencia al objeto DragOptions en los objetos NativeDragEvent para que un destino de arrastre potencial pueda comprobar que las acciones admitidas sean compatibles con la finalidad del componente de destino. Por ejemplo, quizá un componente "trash" (papelera) acepte solamente gestos de arrastrar que permitan la acción de mover.

El ejemplo siguiente muestra cómo se inicia una operación de arrastrar para un objeto de mapa de bits cargado desde un archivo. En el ejemplo se carga una imagen y, al darse un evento mouseDown , se inicia la operación de arrastrar.

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

Finalización de una transferencia hacia fuera

Cuando el usuario suelta el ratón para colocar el elemento arrastrado, el objeto iniciador distribuye un evento nativeDragComplete . Se puede comprobar la propiedad dropAction del objeto de evento y tomar las medidas que corresponda. Por ejemplo, si la acción es NativeDragAction.MOVE, , se podría eliminar el elemento de su lugar de origen. El usuario puede abandonar un gesto de arrastrar soltando el botón del ratón mientras el cursor se encuentra fuera de un destino idóneo. El gestor de la acción de arrastrar define la propiedad dropAction para un gesto abandonado en NativeDragAction.NONE .