2011-05-23 56 views
0

我需要一种将图像从容器拖放到另一个的方法。我已经尝试了几种不同的方式,但我猜拖放&东西仍然躲过我。无论如何,这是我想要做的,一个容器将包含一些位图/矢量图像(这是什么最好的方式?瓷砖组?或?),然后我想能够拖动任何图像到另一个更大面板内的图像。就像在Photoshop中拖动形状一样。将图像从容器拖放到另一个 - Flex

没有代码在这里,因为我完全失去了如何去做。我在这里和那里发现了一些提示/教程,但没有哪一个能够轻松理解或适应我的需求。那么,有什么帮助?

编辑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); 

     } 

回答

0

不知道你的“容器”的意思,但总要对形状使用MOUSE_DOWN/MOUSE_UP事件侦听器,用的startDrag()和stopDrag ()调用监听器函数。

+0

好吧,不知道容器是否是合适的术语。但这是我想要的。我想在一个说法中保留一些图像,拼贴组,然后我想将任何图像拖放到Panel内的另一个较大的图像上。你有什么联系,我可以通过你提到的事件? – redGREENblue 2011-05-23 19:42:02

0

启用拖放操作的最简单方法是使用List组件(您可以给它一个自定义布局,比如TileLayout)。请参阅Flex文档中的Using drag-and-drop with list-based controls以获得一些可帮助您入门的示例代码。

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

+0

我在这里和那里找到了一些代码。无论如何,我的问题更新了代码,现在我面临的问题是,每次图像被拖放时,实际上都会创建一个副本并放在目标上。现在,一旦它进入目标(即,使用较大图像进行图像控制),我需要它在Image控件的不同坐标上仍可拖动/可拖放,但不需要复制图像。这就是图像应该完全转移到新的位置。我怎么做? – redGREENblue 2011-05-24 20:28:51

+0

如果您在您的拖动启动器上侦听dragComplete事件,则可以在拖放后处理清理。您可能还想查看DragManager.showFeedback(DragManager.MOVE)以指定拖动是移动而不是副本。 – joshtynjala 2011-05-25 18:50:00

相关问题