Перетащите изображение из контейнера в другой - Flex - PullRequest
0 голосов
/ 23 мая 2011

Мне нужен способ перетаскивания изображения из контейнера в другой. Я пробовал несколько разных способов, но я думаю, что перетаскивание все еще ускользает от меня. В любом случае, вот что я пытаюсь сделать: контейнер будет содержать несколько растровых / векторных изображений (каков наилучший способ для этого? Tile Group? Или?), А затем я хочу иметь возможность перетаскивать любое изображение на другое большее Изображение внутри панели. Так же, как перетаскивание фигур в Photoshop.

Здесь нет кода, так как я совершенно заблудился, как это сделать. Здесь и там я нашел несколько советов / руководств, но ни одного, который бы я мог легко понять или адаптировать к моим потребностям. Итак, любая помощь?

Редактировать 1: До сих пор до сих пор:

        public function beginDrag( mouseEvent:MouseEvent ):void
        {
          var dragInitiator:IUIComponent = mouseEvent.currentTarget as IUIComponent;

            var dragSource:DragSource = new DragSource();
            dragSource.addData(mouseEvent.currentTarget.source, "items");

            var dragProxy:Image = new Image();
            dragProxy.source = mouseEvent.currentTarget.source;
            dragProxy.setActualSize(mouseEvent.currentTarget.width,mouseEvent.currentTarget.height)
            DragManager.doDrag(dragInitiator, dragSource, mouseEvent, dragProxy);
        }
        public function acceptDrop( dragEvent:DragEvent ):void
        {
            var dropTarget:IUIComponent = dragEvent.currentTarget as IUIComponent;
            var dragSource:DragSource = dragEvent.dragSource;
            if (dragSource.hasFormat("items"))
            {
                DragManager.acceptDragDrop(Image(dragEvent.currentTarget));
            }
        }
        public function handleDrop( dragEvent:DragEvent ):void
        {
            var dragInitiator:IUIComponent = dragEvent.dragInitiator;
            var dropTarget:IUIComponent = dragEvent.currentTarget as IUIComponent;

            var items:String = dragEvent.dragSource.dataForFormat("items") as String;
            var img:Image = new Image();
            img.x=dragEvent.localX;
            img.y=dragEvent.localY;
            img.width = 50;
            img.height=50;
            img.source=items.toString();
            var bitmap:Bitmap= Bitmap(img.content);
            myImage.addChild(img);

        }

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

Самый простой способ включить перетаскивание - использовать компонент List (вы можете назначить ему собственный макет, такой как TileLayout). См. Использование перетаскивания с элементами управления на основе списка в документации по Flex, где приведен пример кода, с которого следует начать.

Если по какой-то причине Список не будет работать для вас, вам нужно будет поиграться с DragManager напрямую. Статья Добавление поддержки перетаскивания вручную описывает все необходимые события и предоставляет пример кода.

0 голосов
/ 23 мая 2011

Не уверен, что вы подразумеваете под "контейнером", но в целом вы хотите использовать прослушиватели событий MOUSE_DOWN / MOUSE_UP для фигур с вызовами startDrag () и stopDrag () в функциях слушателя.

...