1

昨日、私と友人のKetan thakkarはフレックスのドラッグ ドロップに関連する問題に取り組んでいました。

画像が直接または埋め込まれている場合、画像を簡単にドラッグできます。しかし、フレックスローダーからソースを持つ画像をドラッグしようとすると、元の画像は親を失い、元の場所に戻ることはありません。私たちは解決策を見つけようとしましたが、幸運にも成功しました。

コードは以下です。この問題が存在する理由を誰かが知っている場合は、私たちを助けてください。今のところ、この方法で管理しています。

<?xml version="1.0" encoding="utf-8"?>

<mx:Script>
    <![CDATA[
        import mx.controls.Image;
        import mx.core.DragSource;
        import mx.core.FlexLoader;
        import mx.core.UIComponent;
        import mx.events.DragEvent;
        import mx.events.FlexEvent;
        import mx.graphics.ImageSnapshot;
        import mx.managers.DragManager;

        private var fl:FlexLoader = new FlexLoader();

        private var img1:Image = new Image();   

    private function doDragEnter(event:DragEvent):void
    {           
        DragManager.acceptDragDrop(UIComponent(event.target));
    }

    private function doDragDrop(event:DragEvent):void
    {
        var img:Image;
        if (event.dragInitiator.parent == dropCanvas)          
            img = event.dragInitiator as Image;
        else
        {
            img = new Image();
            img.width = img.height = 120;
            img.source = img1.source;
            img.addEventListener(MouseEvent.MOUSE_DOWN, doDragStart);
            dropCanvas.addChild(img);          
        }
        img.x = event.localX - (event.dragSource.dataForFormat("localX") as Number);
        img.y = event.localY - (event.dragSource.dataForFormat("localY") as Number);
    }

    private function doDragStart(event:MouseEvent):void 
    {
        var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(event.currentTarget as IBitmapDrawable);
        var imageByteArray:ByteArray = imageSnap.data as ByteArray;
        img1.load(imageByteArray);

        var dragInitiator:Image = event.currentTarget as Image;
        var dragSource:DragSource = new DragSource();
        var dragProxy:Image = new Image();
        dragProxy.source = img1.source;
        dragProxy.x = mouseX-25;
        dragProxy.y = mouseY-25;
        dragProxy.width = 80;
        dragProxy.height= 80;

        DragManager.doDrag(dragInitiator, dragSource, event, dragProxy,0,0,1,false);
    }

        protected function application1_creationCompleteHandler(event:FlexEvent):void
        {
            fl.contentLoaderInfo.addEventListener(Event.COMPLETE, oncomplete);
            fl.load( new URLRequest('assets/1.swf'));
        }

        private function oncomplete(event:Event):void
        {
            img.source = fl;
        }

    ]]>
</mx:Script>
<controls:FlexBook width="400" height="200"
                   itemSize="halfPage">
    <controls:content>
        <mx:Image id="img" mouseDown="doDragStart(event)" /><!--source="@Embed('assets/Hawk.jpg')"-->
        <mx:Image id="img11" mouseDown="doDragStart(event)" /><!--source="@Embed('assets/Hawk.jpg')"-->
        <mx:Image id="img2" mouseDown="doDragStart(event)" /><!--source="@Embed('assets/Hawk.jpg')"-->
    </controls:content>
</controls:FlexBook>    
<mx:Canvas id="dropCanvas" width="100%" height="100%" borderColor="#1C5CC7" dragEnter="doDragEnter(event)" dragDrop="doDragDrop(event)"  borderStyle="solid" cornerRadius="20" borderThickness="6" backgroundColor="#7E92FC"/>
<!--<mx:Image id="dropImage" source="assets/1.swf" />-->

4

1 に答える 1

1

同様の問題がありました。問題は次の行にあります。

dragProxy.source = img1.source;

リンクする代わりに、ここのようにビットマップimg1 をコピーする必要があります。

于 2012-10-07T14:16:06.013 に答える