Flex中的拖放(Drag-Drop)事件入门
?对于一些控件如DataGrid,HorizontalList,List,Menu,PrintDataGrid,TileList,Tree等,我们可以通过设置控件属性dragEnabled,dropEnabled,dragMoveEnabled来很方便的实现拖放效果,但是当我们面临一些不是基于列表控件(non-list-based)的组件 ? 拖曳初始化事件(Drag initiator events) ? 鼠标锁定事件和鼠标移动事件(mouseDown events and mouseMove events) ? 以下的例子里使用图片控件(Image control)内嵌了4张图片(1分,2分,5分和10分硬币的图片).对于每一个图片控件,我们都定义了mouseMove事件,并且定义了一个事件处理方法dragIt()来处理这个事件. 在dragIt()方法里,我们获得一个指向当前硬币图片事件的引用,该引用指到该事件对象的currentTarget属性.我们把它保存为本地对象并命名为dragInitiator. ? 接下来我们创建一个DragSource的实例,在其中创建一个addData()方法获取由dragIt()方法传过来的value参数,这个参数用于以后处理Drop事件时使用. ? 最后我们通过使用DragManager类中的静态方法doDrag(),然后指定相关的drag initiator,drag source,event object,就可以开始拖曳操作了. ? 在这个例子里,你可以拖动图片对象到任何地方,但是无法放置,因为我们并没有指定任何被放置的对象.
?1
?2 ?3 ?4 ?5 ?7 ?8 ?9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 43 44 47 48 63 65 想实践的话随便搞4张差不多的图片放到flex项目的assets下,对应好命名,就可使用.
<?xml version="1.0"?> <!-- dragdropDandDImageProxy.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <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,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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |