2010-11-18 3 views
1

imageProxyではなく元のソースイメージをどのように移動できますか?

<mx:Script> 
     <![CDATA[ 
      //Import classes so you don't have to use full names. 
      import mx.managers.DragManager; 
      import mx.core.DragSource; 
      import mx.events.DragEvent; 
      import flash.events.MouseEvent; 

      // Embed icon image. 
      [Embed(source='assets/globe.jpg')] 
      public var globeImage:Class; 

      // The mouseMove event handler for the Image control 
      // initiates the drag-and-drop operation. 
      private function mouseOverHandler(event:MouseEvent):void 
      {     
       var dragInitiator:Image=Image(event.currentTarget); 
       var ds:DragSource = new DragSource(); 
       ds.addData(dragInitiator, "img");    

       // The drag manager uses the Image control 
       // as the drag proxy and sets the alpha to 1.0 (opaque), 
       // so it appears to be dragged across the Canvas. 
       var imageProxy:Image = new Image(); 
       imageProxy.source = globeImage; 
       imageProxy.height=15; 
       imageProxy.width=15;     
       DragManager.doDrag(dragInitiator, ds, event, 
        imageProxy, -15, -15, 1.00); 
      } 

      // The dragEnter event handler for the Canvas container 
      // enables dropping. 
      private function dragEnterHandler(event:DragEvent):void { 
       if (event.dragSource.hasFormat("img")) 
       { 
        DragManager.acceptDragDrop(Canvas(event.currentTarget)); 
       } 
      } 

      // The dragDrop event handler for the Canvas container 
      // sets the Image control's position by 
      // "dropping" it in its new location. 
      private function dragDropHandler(event:DragEvent):void { 
       Image(event.dragInitiator).x = 
        Canvas(event.currentTarget).mouseX; 
       Image(event.dragInitiator).y = 
        Canvas(event.currentTarget).mouseY; 
      } 
     ]]> 
    </mx:Script> 

    <!-- The Canvas is the drag target --> 
    <mx:Canvas id="v1" 
     width="500" height="500" 
     borderStyle="solid" 
     backgroundColor="#DDDDDD" 
     dragEnter="dragEnterHandler(event);" 
     dragDrop="dragDropHandler(event);"> 

     <!-- The image is the drag initiator. --> 
     <mx:Image id="myimg" 
      source="@Embed(source='assets/globe.jpg')" 
      mouseMove="mouseOverHandler(event);"/> 
    </mx:Canvas> 
</mx:Application> 

この例でimageProxy(画像を複製)ドラッグと移動します。しかし、元のソースイメージをドラッグしたいのですが、ドラッグイニシエータはimageProxyではありません。どのようにできるのか ?試してみました

DragManager.doDrag(dragInitiator, ds, event, 
         dragInitiator, -15, -15, 1.00); it's moving but deleted ? 

これはどうですか?

答えて

0

キャンバス内で画像を移動しようとしているように見えますが、正しいですか?もしそうなら、私の考えでは、DragManagerと関連するメカニズムを使うのは大変です。画像にマウスダウン/アップのハンドラーを追加し、メンバーvar "isMouseButtonDown"を追加するか、マウスボタンが押されたときにtrueに設定され、マウスボタンが押されたときにfalseに設定されるものを追加するだけです。マウスが動かなくなったら、マウスの動きのためにイメージにハンドラを追加します(マウスが上がったときにハンドラを削除することを忘れないでください)。次に、moveイベントを取得し、isMouseButtonDownが本当。プロのヒント:マウスの移動のためのハンドラを追加するときは、addEventListenerの3番目のパラメータをtrue(useCapture)に設定します。これにより、画像の動きがはるかに少なくなります。希望が役立ちます。

関連する問題