package com
{
import mx.core.UIComponent;
import mx.core.DragSource;
import mx.controls.Image;
import mx.events.DragEvent;
import mx.managers.DragManager;
import flash.display.DisplayObject;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;
public class DragUtil
{
public function DragUtil() {
}
/**
* 开始拖拽
* */
public static function dragHandler(event:MouseEvent):void
{
// 定义拖拽挂载数据源
var dsragSource:DragSource = new DragSource();
// 定义拖拽图标
var copy:Image = new Image();
// 拖拽对象
var target:Image = event.currentTarget as Image;
// 添加拖拽数据源数据
dsragSource.addData(target, "img");
dsragSource.addData(event.localX, "x");
dsragSource.addData(event.localY, "y");
// 拖拽图标
copy.source = new Bitmap(getBitmapData(target.content));
// 执行拖拽
DragManager.doDrag(target, dsragSource, event, copy);
}
/**
* 进入拖放区域
* */
public static function dragEnterHandler(event:DragEvent):void
{
// 进入区域, 设置状态为允许拖放
if (event.dragSource.hasFormat("img"))
DragManager.acceptDragDrop(event.target as UIComponent);
}
/**
* 释放拖拽
* */
public static function dragDropHandler(event:DragEvent):void
{
var img:Image = event.dragSource.dataForFormat("img") as Image;
// 处理图片防止位置
img.x = event.currentTarget.mouseX - (event.dragSource.dataForFormat("x") as Number);
img.y = event.currentTarget.mouseY - (event.dragSource.dataForFormat("y") as Number);
}
/**
* 获取图片信息
* */
private static function getBitmapData(target:DisplayObject):BitmapData
{
var res:BitmapData = new BitmapData(target.width, target.height);
res.draw(target);
return res;
}
}
}
--使用
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
width="100%"
height="100%"
minWidth="350"
minHeight="136"
backgroundColor="#ffffff"
>
<mx:Script>
<![CDATA[
import com.DragUtil;
]]>
</mx:Script>
<mx:Canvas id="testArea" backgroundColor="#ffffff" width="100%" height="100%"
dragEnter="DragUtil.dragEnterHandler(event);" dragDrop="DragUtil.dragDropHandler(event);" >
<mx:Image source="../assert/bg.jpg" mouseDown="DragUtil.dragHandler(event);" />
</mx:Canvas>
</mx:Application>