Как я могу переместить исходное изображение, а не imageProxy? - PullRequest
1 голос
/ 18 ноября 2010

    <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 (дублированное изображение) перетаскивает и перемещает.Но я хочу переместить оригинальный источник изображения dragInitiator, а не imageProxy.Как я могу сделать ?Я пытался, как

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

Есть идеи об этом?

1 Ответ

0 голосов
/ 18 ноября 2010

Похоже, вы просто пытаетесь переместить изображение в пределах холста, верно?Если так, то использование DragManager и связанных с ним механизмов, на мой взгляд, излишне.Вы можете просто добавить обработчики к своему изображению для мыши вверх / вниз, а затем добавить член var "isMouseButtonDown" или что-то подобное, для которого вы установите значение true, когда кнопка мыши нажата, и значение false, когда кнопка мыши вверх.Когда мышь останавливается, добавьте обработчик к изображению для перемещения мыши (не забудьте удалить обработчик, когда мышь поднимается.) Затем вы обновляете x / y своего изображения всякий раз, когда получаете событие перемещения, и isMouseButtonDown имеет значениеправда.Совет для профессионалов: при добавлении обработчика для перемещения мыши установите третий параметр addEventListener в значение true (useCapture), это сделает ваше изображение более подвижным.Надеюсь, это поможет.

...