Para suportar o gesto de arrastar para fora, você deve criar um objeto Clipboard em resposta a um evento
mouseDown
e enviá-lo ao método
NativeDragManager.doDrag()
. Seu aplicativo pode então ouvir o evento
nativeDragComplete
sobre o objeto iniciador para determinar que ação tomar quando o usuário conclui ou abandona o gesto.
Preparação de dados para transferência
Para preparar dados ou um objeto para arrastar, crie um objeto Clipboard e adicione as informações a serem transferidas em um ou mais formatos. Você pode usar os formatos de dados padrão para passar dados, que podem ser convertidos automaticamente em formatos nativos da área de transferência e em formatos definidos pelo aplicativo para passar objetos.
Se, do ponto de vista computacional, for caro converter as informações a serem transferidas para um formato específico, você pode fornecer o nome de uma função de manipulador para realizar a conversão. A função é chamada se, e apenas se, o componente ou aplicativo receptor ler o formato associado.
Para mais informações sobre formatos de área de transferência, veja
Formatos de dados da área de transferência
.
O exemplo a seguir ilustra como criar um objeto Clipboard contendo um bitmap em vários formatos: um objeto Bitmap, um formato de bitmap nativo e um formato da lista de arquivo contendo o arquivo do qual o bitmap foi originalmente carregado:
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;
}
Início de uma operação de arrastar e soltar
Para iniciar uma operação de arrastar, chame o método
NativeDragManager.doDrag()
em resposta a um evento de mouse para baixo. O método
doDrag()
é um método estático que adota os seguintes parâmetros:
Parâmetro
|
Descrição
|
iniciador
|
O objeto do qual a ação de arrastar se origina e que despacha os eventos
dragStart
e
dragComplete
. O iniciador deve ser um objeto interativo.
|
área de transferência
|
O objeto Clipboard contendo os dados a serem transferidos. O objeto Clipboard é referenciado nos objetos NativeDragEvent despachados durante a sequência de arrastar e soltar.
|
dragImage
|
(Opcional) Um objeto BitmapData a ser exibido durante a ação de arrastar. A imagem pode especificar um valor
alpha
. (Observação: o Microsoft Windows sempre aplica uma atenuação alfa fixa a imagens de arrastar).
|
deslocamento
|
(Opcional) Um objeto Point especificando o deslocamento da imagem de arrastar do ponto ativo do mouse. Use coordenadas negativas para mover a imagem de arrastar para cima e à esquerda com relação ao cursor do mouse. Se nenhum deslocamento for fornecido, o canto superior esquerdo da imagem de arrastar será posicionado no ponto ativo do mouse.
|
actionsAllowed
|
(Opcional) Um objeto NativeDragOptions especificando que ações (copiar, mover ou vincular) são válidas para a operação de arrastar. Se nenhum argumento for fornecido, todas as ações serão permitidas. O objeto DragOptions é referenciado em objetos NativeDragEvent para permitir que um possível destino da ação de arrastar verifique se as ações permitidas são compatíveis com o objetivo do componente de destino. Por exemplo, um componente “trash” pode aceitar apenas gestos de arrastar que permitem a ação de mover.
|
O exemplo a seguir ilustra como iniciar uma operação de arrastar para um objeto de bitmap carregado de um arquivo. O exemplo carrega uma imagem e, em um evento
mouseDown
, inicia a operação de arrastar.
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);
}
}
}
Conclusão de uma transferência de arrastar para fora
Quando um usuário solta o item arrastado liberando o mouse, o objeto iniciador despacha um evento
nativeDragComplete
. Você pode verificar a propriedade
dropAction
do objeto de evento e executar a ação apropriada. Por exemplo, se a ação for
NativeDragAction.MOVE,
você poderia remover o item de origem de seu local original. O usuário pode abandonar um gesto de arrastar liberando o botão do mouse enquanto o cursor está fora de um destino de arrastar aceitável. O gerente de arrastar define a propriedade
dropAction
para um gesto abandonado a
NativeDragAction.NONE
.
|
|
|