2008/03/12

AIRに画像ファイルをドラッグ&ドロップして表示

AIRで作成したアプリケーションに画像ファイルをドラッグ&ドロップして表示するサンプルを作成しましたので掲載します。

AIRで作成したアプリケーション外からドラッグ&ドロップするには「NativeDragEvent」に定義してある「NATIVE_DRAG_ENTER」と「NATIVE_DRAG_DROP」のイベント処理を行います。

ポイントは

1.
NATIVE_DRAG_ENTERイベントにて「NativeDragManager.acceptDragDrop」を呼び出しドラッグ&ドロップを許可する

2.
NATIVE_DRAG_DROPイベントにてイベントクラスのプロパティ「Clipboard」からデータを取得して処理する

となっています。
詳細は下記のサンプルをご覧ください。


<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="applicationCompleteEventHandle()">

<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.DragManager;

var loader:Loader;

private function applicationCompleteEventHandle():void {

canvas.addEventListener(
NativeDragEvent.NATIVE_DRAG_ENTER, nativeDragEnterEventHandler);

canvas.addEventListener(
NativeDragEvent.NATIVE_DRAG_DROP, nativeDragDropEventHandler);
}

private function nativeDragEnterEventHandler(event:NativeDragEvent):void {

if (event.clipboard.hasFormat(
ClipboardFormats.FILE_LIST_FORMAT)) {
NativeDragManager.acceptDragDrop(canvas);
}
}

private function nativeDragDropEventHandler(event:NativeDragEvent):void {

var fileList:Array
= event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;

if (fileList.length > 1) {
return;
}

var file:File = fileList[0];
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);

var byteArray:ByteArray = new ByteArray();

fileStream.readBytes(byteArray, 0, fileStream.bytesAvailable);

loader = new Loader();

loader.contentLoaderInfo
.addEventListener(Event.COMPLETE, completeEventHandle);

loader.contentLoaderInfo
.addEventListener(IOErrorEvent.IO_ERROR, ioErrorEventHandler);

loader.loadBytes(byteArray);
}

private function completeEventHandle(event:Event):void {

if (loader.content is Bitmap) {
image.data = loader.content;
}
}

private function ioErrorEventHandler():void {
Alert.show("画像を読み込めませんでした。");
}

]]>
</mx:Script>

<mx:Canvas id="canvas" x="0" y="0" width="100%" height="100%" backgroundColor="#FFFFFF">
<mx:Image id="image" horizontalCenter="0" verticalCenter="0"/>
</mx:Canvas>

</mx:WindowedApplication>

■実行結果

ラベル: ,

0 件のコメント:

コメントを投稿

<< ホーム