Suporte ao gesto de arrastar para fora

Adobe AIR 1.0 e posterior

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 .