드래그아웃 동작 지원Adobe AIR 1.0 이상 드래그아웃 동작을 지원하려면 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() 메서드는 다음과 같은 매개 변수를 사용하는 정적 메서드입니다.
다음 예제에서는 파일에서 로드된 비트맵 객체에 대해 드래그 작업을 시작하는 방법을 보여 줍니다. 이 예제에서는 이미지를 로드하고 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으로 설정합니다. |
|