flex 圖片拖放的實現(drag and drop)

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"
    backgroundColor="#333333" xmlns:tools="tools.*" creationComplete="init();"
   >
<mx:Script>
<![CDATA[
    import mx.core.UIComponent;
    import mx.core.DragSource;
    import mx.events.DragEvent;
    import mx.managers.DragManager;

    [Embed(source="000.png")]
    private var imgsrc:Class;

    private function init():void
    {
        img1.source = imgsrc;
        img2.source = imgsrc;
    }

    /**
     * 開始拖拽
     * */
    private function dragHandler(event:MouseEvent):void
    {
        // 定義拖拽掛載數據源
        var dsragSource = new DragSource();
        // 定義拖拽圖標(用於第二副圖片的拖拽)
        var di:Image = new Image();
        // 拖拽對象
        var target:Image = event.currentTarget as Image;

        // 添加拖拽數據源數據
        dsragSource.addData(target, "img");
        dsragSource.addData(event.localX, "x");
        dsragSource.addData(event.localY, "y");

        // 拖拽圖標
        if (target.id == "img2")
            di.source = new Bitmap(getBitmapData(target.content));
        else
            di = null;
        // 執行拖拽
        DragManager.doDrag(target, dsragSource, event, di);
    }
    /**
     * 進入拖放區域
     * */
    private function dragEnterHandler(event:DragEvent):void
    {
        // 進入區域, 設置狀態爲允許拖放
        if (event.dragSource.hasFormat("img"))
            DragManager.acceptDragDrop(event.target as UIComponent);
    }
    /**
     * 釋放拖拽
     * */
    private function dragDropHandler(event:DragEvent):void
    {
        // 複製圖片
        var img:Image = new Image();
        img.source = new Bitmap(getBitmapData(event.dragSource.dataForFormat("img") as DisplayObject));
        // 處理圖片防止位置
        img.x = event.currentTarget.mouseX - (event.dragSource.dataForFormat("x") as Number);
        img.y = event.currentTarget.mouseY - (event.dragSource.dataForFormat("y") as Number);
        // 顯示圖片
        event.currentTarget.addChild(img);
    }
    /**
     * 獲取圖片信息
     * */
    private function getBitmapData(target:DisplayObject):BitmapData
    {
        var res:BitmapData = new BitmapData(target.width, target.height);
        res.draw(target);
        return res;
    }
]]>
</mx:Script>
<mx:VBox>
    <mx:Image id="img1" mouseDown="dragHandler(event);" />
    <mx:Image id="img2" mouseDown="dragHandler(event);" />
    <mx:Button label="Clear Images" click="testArea.removeAllChildren();" />
</mx:VBox>
<mx:Canvas id="testArea" backgroundColor="#ffffff" width="100%" height="100%"
    dragEnter="dragEnterHandler(event);" dragDrop="dragDropHandler(event);" />

</mx:Application>

發佈了22 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章