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
.
|
|
|