Flex之使用DragManager实现对象拖动
被拖动对象:Image
放下目标:FlowBox(Flex FlowBox Container 是 Tony 编写的一个组件,这个组件除了拥有Container的特性之外,还有一个特点是:如果容器的子组件在一行放不下,它会自动根据空间换到下一行。)
实现目标:将Image图像拖动到目标FlowBox并放下
实现代码:
1、导入命名空间
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是一个字符串,代表我拖动的对象的属性值,可以根据需要修改
<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方法
///<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实现对象拖动相关推荐
- Flash/Flex学习笔记(30):不用startDrag和stopDrag的对象拖动
对于从Sprite类继承来的对象,要实现拖放当然是Flash/Flex学习笔记(13):对象拖动(startDrag/stopDrag) 里讲的方法最方便,但是对于不是从Sprite类继承得来的对象, ...
- 在Flex中使用本地共享对象
本地共享对象的概念想必都很清楚了,有些类似于浏览器的Cookie,在Flash中提供了下面的操作本地对象的方法: SharedObject.clear() 删除本地共享对象 SharedObject. ...
- Flex实现页面多态--state对象
在Flex 程序中,引入了状态设计的概念.在一个程序中,按照功能的需求,将界面切分成相对独立的部分.运行过程中,随着用户交互,界面在各个部分之间切换.比如在购物车程序中,登录界面.选购商品界面.购物车 ...
- 解决 Flex模块切换后导致对象转换失败 注册信息丢失
在Flex下, 如果一个项目里面有多个模块时,在第一次加载Module是可以的.在第二次加载module时,"注册"信息会丢失. 即如下的[RemoteClass(alias=&q ...
- 为自定义编辑器属性增加对象拖动到属性和选择对应对象信息功能
任务背景: PS:关于为什么不是直接拖AudioClip: 1.因为音效系统不属于UI系统 2:还有可能音效本身都没有在制作中,先命个名占位 3.甚至于程序端根本就没有原始美术资源,都是AB包. 任务 ...
- flex学习笔记--关于拖动
拖动--从startDrag开始直到flex里的DragManager 或者是NativeDragManager 但核心还是三个事件mouseDown,mouseUp,mouseMove 这几个事件的 ...
- bootstrap中轮播图、模态框、提示框/弹出框、滚动监听、弹性布局、响应式flex、多媒体对象
轮播图: bootstrap封装了轮播图的功能,其具体如下: 类名 描述 .carousel 创建一个轮播图块的容器,实质是做布局用:且此容器应该有一个di属性,其属性值提供给下面左右按钮href锚点 ...
- 43个热门Flex和ActionScript 3.0 APIs,技巧和工具
Sean Moore Bio 说道:秋天又一次来临了,是时候回顾一下2008年最热门的Flex和ActionScript 3.0 APIs,技巧和工具了,下面是我的总结,收集的比较全,Flex开发必备 ...
- [汇总]Flex面试题及答案
1.我不想在容器里显示滚动条怎么办? 答:指定horizontalScrollPolicy和verticalScrollPolicy为off 2.请问Flex bulider3可以创建几种不同的项目? ...
最新文章
- 以下一些使用ASP.NET和VISUAL STUDIO.NET2003的经验和技巧
- matlab GUI gca gco gcf
- win10计算机记录,启用Windows 10计算器中的历史记录功能 | MOS86
- 方法调用(车票练习)
- ElasticSearch highlight搜索结果高亮显示(英文检索)
- 1.4. Open Source and License
- Java动态代理全面分析
- windows服务器远程执行命令(PowerShell+WinRM)
- restful api和普通api有什么特点_Django REST Framework教程(1): 什么是序列化和RESTful的API
- 理解AOP思想(面向切面编程)
- 设计模式,你知道什么是Observer模式吗?
- matlab统计车流量及车流密度,基于视频的车流量统计——matlab代码
- 网页显示不正常怎么修复
- Java设计模式 - 依赖倒转原则
- 酷派s6、Coolpad 9190l_C00 无log信息输出解决方法
- cordova多语言(国际化,本地化,全球化)
- 手机做显示器服务器,华为MateView体验:手机做主机,显示器也能当电脑用
- python校验用户登录信息
- 求知若饥,虚心若愚Stay Hungry, Stay Foolish--2005斯坦福大学05年毕业演讲
- 清道夫(scavenger)流量
热门文章
- 如何将堆栈跟踪转换为字符串?
- 在Python中手动引发(抛出)异常
- mysql 与c_mysql基础:mysql与C结合实例
- 海信CAS计算机辅助手术系统,计算机辅助手术系统(CAS)
- java 小数 乘法_javascript(js)的小数点乘法除法-Java架构师必看
- java8堆内存模型_「GC系列」JVM堆内存分代模型及常见的垃圾回收器
- JavaScript常用数组操作方法,包含ES6方法
- python读取log文件_python之文件的读写(文本文档,log文件)
- 来,膜拜下android roadmap,强大的执行力
- 复杂度分析当中的Θ、Ο、Ω