将图像从容器拖放到另一个容器 - Flex

时间:2011-05-23 19:34:39

标签: flex drag-and-drop bitmap

我需要一种方法将图像从容器拖放到另一个容器。我尝试了几种不同的方法,但我想是拖拽和放大器。掉落的东西还在逃避我。无论如何,这就是我要做的事情,一个容器将包含一些位图/矢量图像(这是最好的方法吗?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 :(得分:0)

不确定“容器”是什么意思,但总体上你想在形状上使用MOUSE_DOWN / MOUSE_UP事件监听器,并在监听器函数中调用startDrag()和stopDrag()。

答案 1 :(得分:0)

启用拖放的最简单方法是使用List组件(您可以为其提供自定义布局,例如TileLayout)。有关可以帮助您入门的示例代码,请参阅Flex文档中的Using drag-and-drop with list-based controls

如果由于某种原因,List不适合你,你将需要直接使用DragManager。文章Manually adding drag-and-drop support描述了所有必需的事件,并提供了示例代码。