被拖动对象:Image

放下目标:FlowBox(Flex FlowBox Container 是 Tony 编写的一个组件,这个组件除了拥有Container的特性之外,还有一个特点是:如果容器的子组件在一行放不下,它会自动根据空间换到下一行。)

实现目标:将Image图像拖动到目标FlowBox并放下

实现代码:

1、导入命名空间

Code
import mx.containers.Box;
import mx.containers.Canvas;
import mx.core.UIComponent;
import mx.messaging.AbstractConsumer;
import mx.events.DragEvent;
import mx.controls.Alert;
import mx.managers.DragManager;
import mx.core.DragSource;

2、定义对象

Image的dragit事件定义图片允许被拖动,y是一个字符串,代表我拖动的对象的属性值,可以根据需要修改

Code
<mx:Image x="404" y="106" id="Y" source="{Y1}"  mouseDown="dragit(event,'Y')"/>
<ns1:FlowBox backgroundAlpha="0" backgroundColor="#FFFFFF" id="fb" x="10" y="216" width="423" height="238" borderColor="#010101" borderStyle="solid" dragEnter="dragEnterHandler(event);" dragExit="dragExitHandler(event);"  dragDrop="dragDropHandler(event);">
 </ns1:FlowBox>

3、编写dragit、dragEnterHandler、dragExitHandler、dragDropHandler方法

Code
///<summary>
///拖动事件
///<param>event:鼠标事件</param>
///<param>type:类型</param>
///</summary>
private function dragit(event:MouseEvent,type:String):void
{
    var di:Image = event.currentTarget as Image;
    var ds:DragSource = new DragSource();
    ds.addData(type,"type");
    ds.addData(di,"img");
    var dragProxy:Image = new Image();
    dragProxy.source = event.currentTarget.source;
    DragManager.doDrag(di, ds, event, dragProxy);
}

///<summary>
///拖动句柄,指定放下对象
///<param>event</param>
///</summary>
private function dragEnterHandler(event:DragEvent):void
{
    var dt:FlowBox = event.currentTarget as FlowBox;
    dt.setStyle("borderThickness", 2);
    DragManager.acceptDragDrop(dt);
}
///<summary>
///拖动放下事件,恢复目标外观
///<param>event</param>
///</summary>
private function dragExitHandler(event:DragEvent):void
{
    var droptarget:FlowBox = event.currentTarget as FlowBox;
    droptarget.setStyle("borderThickness",1);
}
private function dragDropHandler(event:DragEvent):void
{
    var ds:Image = event.dragSource as Image;
    var dt:FlowBox = event.currentTarget as FlowBox;
    var type:String = event.dragSource.dataForFormat("type") as String;
    var value:int = event.dragSource.dataForFormat("value") as int;
    dt.setStyle("borderThickness",1);
    var img:Image = new Image();
    img.source = new Bitmap(getBitmapData(event.dragSource.dataForFormat("img") as DisplayObject));
    img.doubleClickEnabled = true;
    img.addEventListener(MouseEvent.DOUBLE_CLICK,RemoveObject);
    dt.addChild(img as DisplayObject);
}
///<summary>
///绘制位图
///<param>target:目标位图</param>
///</summary>
private function getBitmapData(target:DisplayObject):BitmapData
{
    var res:BitmapData = new BitmapData(target.width, target.height);
    res.draw(target);
    return res;
}
///<summary>
///移除对象
///<param>event</param>
///</summary>
private function RemoveObject(event:MouseEvent):void
{
    //阻止冒泡
    event.stopImmediatePropagation();
    var obj:Image = event.currentTarget as Image;
    obj.parent.removeChild(obj);
}

转载于:https://www.cnblogs.com/zhouyu629/archive/2009/10/29/1592418.html

Flex之使用DragManager实现对象拖动相关推荐

  1. Flash/Flex学习笔记(30):不用startDrag和stopDrag的对象拖动

    对于从Sprite类继承来的对象,要实现拖放当然是Flash/Flex学习笔记(13):对象拖动(startDrag/stopDrag) 里讲的方法最方便,但是对于不是从Sprite类继承得来的对象, ...

  2. 在Flex中使用本地共享对象

    本地共享对象的概念想必都很清楚了,有些类似于浏览器的Cookie,在Flash中提供了下面的操作本地对象的方法: SharedObject.clear() 删除本地共享对象 SharedObject. ...

  3. Flex实现页面多态--state对象

    在Flex 程序中,引入了状态设计的概念.在一个程序中,按照功能的需求,将界面切分成相对独立的部分.运行过程中,随着用户交互,界面在各个部分之间切换.比如在购物车程序中,登录界面.选购商品界面.购物车 ...

  4. 解决 Flex模块切换后导致对象转换失败 注册信息丢失

    在Flex下, 如果一个项目里面有多个模块时,在第一次加载Module是可以的.在第二次加载module时,"注册"信息会丢失. 即如下的[RemoteClass(alias=&q ...

  5. 为自定义编辑器属性增加对象拖动到属性和选择对应对象信息功能

    任务背景: PS:关于为什么不是直接拖AudioClip: 1.因为音效系统不属于UI系统 2:还有可能音效本身都没有在制作中,先命个名占位 3.甚至于程序端根本就没有原始美术资源,都是AB包. 任务 ...

  6. flex学习笔记--关于拖动

    拖动--从startDrag开始直到flex里的DragManager 或者是NativeDragManager 但核心还是三个事件mouseDown,mouseUp,mouseMove 这几个事件的 ...

  7. bootstrap中轮播图、模态框、提示框/弹出框、滚动监听、弹性布局、响应式flex、多媒体对象

    轮播图: bootstrap封装了轮播图的功能,其具体如下: 类名 描述 .carousel 创建一个轮播图块的容器,实质是做布局用:且此容器应该有一个di属性,其属性值提供给下面左右按钮href锚点 ...

  8. 43个热门Flex和ActionScript 3.0 APIs,技巧和工具

    Sean Moore Bio 说道:秋天又一次来临了,是时候回顾一下2008年最热门的Flex和ActionScript 3.0 APIs,技巧和工具了,下面是我的总结,收集的比较全,Flex开发必备 ...

  9. [汇总]Flex面试题及答案

    1.我不想在容器里显示滚动条怎么办? 答:指定horizontalScrollPolicy和verticalScrollPolicy为off 2.请问Flex bulider3可以创建几种不同的项目? ...

最新文章

  1. 以下一些使用ASP.NET和VISUAL STUDIO.NET2003的经验和技巧
  2. matlab GUI gca gco gcf
  3. win10计算机记录,启用Windows 10计算器中的历史记录功能 | MOS86
  4. 方法调用(车票练习)
  5. ElasticSearch highlight搜索结果高亮显示(英文检索)
  6. 1.4. Open Source and License
  7. Java动态代理全面分析
  8. windows服务器远程执行命令(PowerShell+WinRM)
  9. restful api和普通api有什么特点_Django REST Framework教程(1): 什么是序列化和RESTful的API
  10. 理解AOP思想(面向切面编程)
  11. 设计模式,你知道什么是Observer模式吗?
  12. matlab统计车流量及车流密度,基于视频的车流量统计——matlab代码
  13. 网页显示不正常怎么修复
  14. Java设计模式 - 依赖倒转原则
  15. 酷派s6、Coolpad 9190l_C00 无log信息输出解决方法
  16. cordova多语言(国际化,本地化,全球化)
  17. 手机做显示器服务器,华为MateView体验:手机做主机,显示器也能当电脑用
  18. python校验用户登录信息
  19. 求知若饥,虚心若愚Stay Hungry, Stay Foolish--2005斯坦福大学05年毕业演讲
  20. 清道夫(scavenger)流量

热门文章

  1. 如何将堆栈跟踪转换为字符串?
  2. 在Python中手动引发(抛出)异常
  3. mysql 与c_mysql基础:mysql与C结合实例
  4. 海信CAS计算机辅助手术系统,计算机辅助手术系统(CAS)
  5. java 小数 乘法_javascript(js)的小数点乘法除法-Java架构师必看
  6. java8堆内存模型_「GC系列」JVM堆内存分代模型及常见的垃圾回收器
  7. JavaScript常用数组操作方法,包含ES6方法
  8. python读取log文件_python之文件的读写(文本文档,log文件)
  9. 来,膜拜下android roadmap,强大的执行力
  10. 复杂度分析当中的Θ、Ο、Ω