Supporto del movimento di trascinamento verso esternoAdobe 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 trasferimentoPer 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 esternoPer 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:
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 esternoQuando 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 perNativeDragAction.NONE. |
|