Compatibilidad con el gesto de arrastrar hacia fueraAdobe 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 transferenciaPara 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 fueraPara 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:
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 fueraCuando 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. |
|