天天看點

flex關于拖放的類

DragManager 類管理拖放操作,您可以使用它來将資料從 Flex 應用程式中的一個位置移動到另一位置。例如,您可以選擇一個對象(如 List 控件中的項目)或一個 Flex 控件(如 Image 控件),然後将其拖至另一個元件進行添加。

DragManager 的所有方法和屬性都是靜态的,是以不需要為其建立執行個體。

所有 Flex 元件都支援拖放操作。Flex 為 List、Tree 和 DataGrid 控件的拖放操作提供了附加支援。

當使用者使用滑鼠選擇某個項目時,所選元件稱為拖動啟動器。拖動操作期間顯示的圖像稱為拖動代理。

當使用者将拖動代理移動到其他元件時,系統會向該元件發送

dragEnter

事件。如果該元件接受拖動,即可成為放置目标,并接收

dragOver

dragExit

dragDrop

事件。

拖動操作完成後,會向拖動啟動器發送

dragComplete

DragSource 類中包含正被拖動的資料。資料可以采用多種格式,具體取決于啟動拖動的控件的類型。

每種資料格式都使用一個字元串進行辨別。

hasFormat()

方法用于确定對象是否包含使用相應格式的資料。

dataForFormat()

方法用于檢索指定格式的資料。

可以使用

addData()

方法直接添加資料,也可以使用

addHandler()

方法間接添加資料。

addHandler()

方法會注冊一個回調,請求該資料時将調用此回調。添加非本機格式的資料可能需要進行大量計算或轉換,此時該方法就非常有用。例如,如果您具有原始聲音資料,則可以添加 MP3 格式處理程式。僅當請求 MP3 資料時才執行 MP3 轉換

DragEvent 類代表作為拖放操作部分進行分派的事件對象。

<?xml version="1.0" encoding="utf-8"?>

<!-- dragdrop\DandDImageCopyMove.mxml -->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"

layout="horizontal">

<mx:Script>

<![CDATA[

import mx.managers.DragManager;

import mx.core.DragSource;

import mx.events.DragEvent;

import flash.events.MouseEvent;

[Embed(source='./assets/20.jpg')]

public var globeImage:Class;

// mouseMove資料管理用來定義圖檔控件的功能。

private function mouseOverHandler(event:MouseEvent):void

{

var dragInitiator:Image=Image(event.currentTarget);

var ds:DragSource = new DragSource();

//向拖動源添加資料和相應的格式 String。此方法不傳回值。

ds.addData(dragInitiator, "img");

// 拖動管理器是以圖檔作為拖動代理。

var p_w_picpathProxy:Image = new Image();

p_w_picpathProxy.source = globeImage;

p_w_picpathProxy.height=10;

p_w_picpathProxy.width=10;

DragManager.doDrag(dragInitiator, ds, event,

p_w_picpathProxy, -15, -15, 1.00);

}

// dragEnter事件管理器用來定義放置目标。

private function dragEnterHandler(event:DragEvent):void {

if (event.dragSource.hasFormat("img"))

//Canvas接受拖放

DragManager.acceptDragDrop(Canvas(event.currentTarget));

// dragOver事件管理器設定拖放操作為複制還是移動。

// 複制或移動會影響在dragComplete事件管理器中的操作。

private function dragOverHandler(event:DragEvent):void

{

if (event.dragSource.hasFormat("img")) {

if (event.ctrlKey) {

//設定拖放操作的回報訓示符

DragManager.showFeedback(DragManager.COPY);

return;

else {

DragManager.showFeedback(DragManager.MOVE);

DragManager.showFeedback(DragManager.NONE);

// dragDrop事件管理器設定圖檔控件在目标容器中的位置。

private function dragDropHandler(event:DragEvent):void {

var draggedImage:Image =

event.dragSource.dataForFormat('img') as Image;

var dropCanvas:Canvas = event.currentTarget as Canvas;

var newImage:Image=new Image();

newImage.source = draggedImage.source;

newImage.x = dropCanvas.mouseX;

newImage.y = dropCanvas.mouseY;

dropCanvas.addChild(newImage);

// dragComplete事件管理器用來完成複制或移動圖檔。

private function dragCompleteHandler(event:DragEvent):void {

event.dragInitiator as Image;

var dragInitCanvas:Canvas =

event.dragInitiator.parent as Canvas;

if (event.action == DragManager.MOVE)

dragInitCanvas.removeChild(draggedImage);

}

]]>

</mx:Script>

<mx:Panel

title="不同類型的非清單類控件中複制移動圖檔示例" width="90%" height="90%"

horizontalAlign="center"

verticalAlign="middle">

<mx:HBox width="100%" height="100%">

<mx:Canvas

width="200" height="200"

borderStyle="solid"

backgroundColor="#FFF6D5">

<mx:Image id="myimg"

source="@Embed(source='./assets/20.jpg')"

mouseMove="mouseOverHandler(event);"

dragComplete="dragCompleteHandler(event);"/>

</mx:Canvas>

backgroundColor="#FEDEF1"

dragEnter="dragEnterHandler(event);"

dragOver="dragOverHandler(event);"

dragDrop="dragDropHandler(event);">

</mx:HBox>

</mx:Panel>

繼續閱讀