드래그아웃 동작을 지원하려면
mouseDown
이벤트에 대한 응답으로 클립보드 객체를 만들어 이를
NativeDragManager.doDrag()
메서드로 보내야 합니다. 응용 프로그램은 시작 객체에서
nativeDragComplete
이벤트를 수신하여 사용자가 해당 동작을 완료하거나 중단할 때 어떤 조치를 취할 것인지를 결정합니다.
전송할 데이터 준비
드래그할 데이터 또는 객체를 준비하려면 Clipboard 객체를 만들고 하나 이상의 포맷으로 전송할 정보를 추가합니다. 기본 클립보드 포맷으로 자동 변환될 수 있는 데이터를 전달하기 위해 표준 데이터 형식을 사용하고, 객체를 전달하기 위해 응용 프로그램에서 정의한 형식을 사용할 수 있습니다.
특정 포맷으로 전송할 정보를 변환하는 계산 비용이 높은 경우 변환을 수행하는 핸들러 함수의 이름을 제공할 수 있습니다. 이 함수는 수신 구성 요소 또는 응용 프로그램이 연관된 포맷을 읽는 경우에만 호출됩니다.
클립보드 포맷에 대한 자세한 내용은
클립보드 데이터 형식
을 참조하십시오.
다음 예제에서는 비트맵 객체, 기본 비트맵 포맷 및 비트맵이 처음 로드된 파일이 포함된 파일 목록 포맷 등, 여러 가지 포맷의 비트맵이 포함된 클립보드 객체를 만드는 방법을 보여 줍니다.
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;
}
드래그아웃 작업 시작
드래그 작업을 시작하려면 마우스 클릭 이벤트에 대한 응답으로
NativeDragManager.doDrag()
메서드를 호출합니다.
doDrag()
메서드는 다음과 같은 매개 변수를 사용하는 정적 메서드입니다.
매개 변수
|
설명
|
initiator
|
드래그가 시작되는 객체로
dragStart
및
dragComplete
이벤트를 전달합니다. 시작자는 대화형 객체여야 합니다.
|
clipboard
|
전송될 데이터가 포함된 Clipboard 객체입니다. Clipboard 객체는 끌어 놓기 시퀀스 중에 전달되는 NativeDragEvent 객체에서 참조됩니다.
|
dragImage
|
(선택적) 드래그 중에 표시할 BitmapData 객체입니다. 이미지는
alpha
값을 지정할 수 있습니다. (참고: Microsoft Windows는 항상 고정 alpha 페이드를 드래그 이미지에 적용합니다.)
|
offset
|
(선택적) 마우스 핫스팟으로부터 드래그 이미지의 오프셋을 지정하는 Point 객체입니다. 마우스 커서의 위와 왼쪽으로 드래그 이미지를 이동하려면 음수 좌표를 사용합니다. 오프셋이 제공되지 않은 경우 드래그 이미지의 왼쪽 위 모서리가 마우스 핫스팟 위치에 배치됩니다.
|
actionsAllowed
|
(선택적) 드래그 동작에 유효한 작업(복사, 이동 또는 연결)을 지정하는 NativeDragOptions 객체입니다. 인수를 지정하지 않으면 모든 작업이 허용됩니다. DragOptions 객체는 허용된 작업이 대상 구성 요소의 목적에 부합되는지를 잠재적인 드래그 대상이 검사할 수 있도록 NativeDragEvent 객체에서 참조됩니다. 예를 들어 “trash” 구성 요소는 이동 작업을 허용하는 드래그 동작만을 허용할 수 있습니다.
|
다음 예제에서는 파일에서 로드된 비트맵 객체에 대해 드래그 작업을 시작하는 방법을 보여 줍니다. 이 예제에서는 이미지를 로드하고
mouseDown
이벤트가 발생하면 드래그 작업을 시작합니다.
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);
}
}
}
드래그아웃 전송 완료
사용자가 마우스를 놓음으로써 드래그된 항목을 드롭하면 시작자 객체는
nativeDragComplete
이벤트를 전달합니다. 이벤트 객체의
dropAction
속성을 검사한 다음 적절한 작업을 수행할 수 있습니다. 예를 들어
NativeDragAction.MOVE
작업의 경우 원래 위치에서 소스 항목을 제거할 수 있습니다. 커서가 유효한 드롭 대상 외부에 있을 때 마우스 버튼을 놓으면 드래그 동작이 중단됩니다. 드래그 관리자는 중단된 동작의
dropAction
속성을
NativeDragAction.NONE
으로 설정합니다.
|
|
|