Flex拖动技术大全(3)

5.从外部拖动到组件,比如从桌面上拖动一个图片到图片组件等。
因为我的flash包中没有flash.events.NativeDragEvent等。所以这里稍作总结。

拖动外部文件

拖动外部文件需要NativeDragEvent,NativeDragManager类。其实用法和上面的DragManager一样,但是往往一个控件既要接受Flex内部被拖进来的控件,还要接受外部拖进来的文件,这时候显得就比较麻烦了。
但是请不要害怕,这里的Clipboard会帮我解决问题。

 

[html]  view plain copy
  1. <</span>span style="font-size:12px;"><</span>mx:Canvas y="40" id="cansAccess" backgroundColor="#000000"  width="300" height="200"  
  2.  dragDrop="complete(event)" nativeDragDrop="nativeComplete(event)" dragEnter="enter(event)" />  
  3. <</span>mx:Button id="btnDrag" label="拖动我"  
  4.  mouseDown="doDrag( event )" />  
  5.   
  6. </</span>span>  

按理来说当拖动内部控件的时候会触发dragDrop事件,拖动外部文件会触发nativeDragDrop事件,事实上,不管你拖动外部文件还是内部控件都会触发这两个事件。这里我们使用Clipboard来解决这一麻烦


 

[html]  view plain copy
  1. private function doDrag( MouseEvent void  
  2.  
  3.  var ds DragSource new DragSource;  
  4.  ds.addData( {"x" e.localX, "y" e.localY},"xy");  
  5.  DragManager.doDrag(btnDrag,ds,e);  
  6.  
  7. private function enter(  :DragEvent void  
  8.  
  9.  DragManager.acceptDragDrop( Canvas(e.target) );  
  10.  NativeDragManager.acceptDragDrop(Canvas(e.target));  
  11.  //使其接受从外部拖进来的文件   
  12.  
  13. private function complete( DragEvent void  
  14.  
  15.    
  16.  
  17. private function nativeComplete( NativeDragEvent void  
  18.  
  19.  var filesObj Array e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT as Array;  
  20.  //获取剪切板上的文件列表  
  21.  if( filesObj &&  filesObj.length > 0)  //符合这一条件说明是从外部拖文件进来  这里假设处理拖进来的是图片  
  22.   
  23.   for each( var item File in filesObj  
  24.    
  25.    switch( item.extension  
  26.     
  27.     case "jpg":  
  28.     case "bmp":  
  29.     case "gif":  
  30.     var img Image new Image;     img.source item.nativePath;     cansAccess.addChild( img );  
  31.     break;     
  32.     
  33.    
  34.   
  35.  else   //否则的话是就是在拖动内部的控件  
  36.   
  37.   var xy Object  e.clipboard.getData(e.clipboard.formats[0]);  
  38.   //还记得doDrag 的时候附加的那个 DragSource 么?  
  39.   //这里因为不能用e.dragSource.dataForFormat("xy")了因为事件不一样,  
  40.   //但我们还是可以用剪切板来取得这个值  
  41.   btnDrag.x  e.localX xy.x cansAccess.x;  
  42.   btnDrag.y  e.localY xy.y cansAccess.y;  
  43.   
  44.  






6.引入dNdLib.swc库让拖动变得更简单
Flex开放了它的拖拽库(即:flex-drag-n-drop-lib),我们可以利用它做一些很有用的拖拽应用,下面我们

来做一个简单的示例,按照下述的步骤,你会了解到在Flex中使用flex-drag-n-drop-lib的技巧。
1.点击这里下载SWC组件到你的桌面。
2.打开FlexBuilder,新建一个Flex Project,在第三步的Library Path选项中,点击Add SWC按钮,将刚才下

载到的SWC组件引入到项目中。


3.点击Finish,在自动创建的MXML文件中,敲入以下代码:

[html]  view plain copy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值