flex - How to handle D-n-D to a Sprite? -
flex - How to handle D-n-D to a Sprite? -
i need observe when user drag-n-drop object sprite. here's sample app illustrates issue. never gets alert:
tks.
<?xml version="1.0" encoding="utf-8"?> <s:application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationcomplete="ini(event)"> <s:layout> <s:verticallayout /> </s:layout> <fx:script> <![cdata[ import mx.controls.alert; import mx.controls.image; import mx.core.dragsource; import mx.core.iuicomponent; import mx.core.uicomponent; import mx.effects.effectclasses.addremoveeffecttargetfilter; import mx.events.dragevent; import mx.events.flexevent; import mx.graphics.imagesnapshot; import mx.managers.dragmanager; private var sprite:sprite; private var uiref:uicomponent = new uicomponent();; protected function ini(event:flexevent):void { uiref = new uicomponent(); uiref.percentwidth = 100; uiref.percentheight = 100; holder.addelement( uiref ); sprite = new sprite(); sprite.graphics.beginfill(0xffff00); sprite.graphics.drawrect( 0, 0, 300, 300 ); sprite.width = 300; sprite.height = 300; sprite.addeventlistener( dragevent.drag_enter, dragenterhandler, false, 0, true); sprite.addeventlistener( dragevent.drag_exit, dragexithandler, false, 0, true); sprite.addeventlistener( dragevent.drag_drop, dragdrophandler, false, 0, true); sprite.addeventlistener( mouseevent.click, clickhandler, false, 0, true); uiref.addchild( sprite ); } private function dragenterhandler(event:dragevent):void { trace('dragenterhandler ' + event.type + '.....'); if( event.dragsource.hasformat( 'xxx' ) ){ trace('acceptdragdrop' ); dragmanager.acceptdragdrop( event.currenttarget.parent iuicomponent ); } } private function dragexithandler(event:dragevent):void { trace('dragexithandler ' + event.type + '------'); } private function dragdrophandler(event:dragevent):void { trace('dragdrophandler ' + event.type + '!!!!!'); alert.show('dragdrophandler'); } private function dodrag(event:mouseevent):void { var d:object = new object(); var dragsource:dragsource = new dragsource(); dragsource.adddata(d, 'xxx'); var bm:bitmap = new bitmap(imagesnapshot.capturebitmapdata(btn)); var dragproxy:image = new image(); dragproxy.source = bm; dragmanager.dodrag(this, dragsource, event, dragproxy, 0, -(event.localy+20), 0.4); } private function clickhandler(event:mouseevent):void { trace('clickhandler------'); } ]]> </fx:script> <s:button label="drag me" mousedown="dodrag(event)" id="btn" /> <s:bordercontainer id="holder" width="300" height="300" minheight="20" bordercolor="#515151" > </s:bordercontainer> </s:application>
flex flash drag-and-drop flex4
Comments
Post a Comment