如何动态加载图像进行拖放?

时间:2010-06-27 22:13:58

标签: flex air

我正在实现从DataGrid拖放到Flex 3 AIR应用程序中的List。我想将拖动图像设为由数据网格项中的字符串字段引用的照片(jpg),名为“imagePath”。我无法在拖动过程中显示图像。我已经三次检查它不是因为图像的路径无效。我以我能想到的各种方式尝试过Image的source()和load()方法。我在mouseDown事件上调用此方法'dragCurrentToList(event)'。

private function dragCurrentToList(event:MouseEvent):void 
{                
    var current:Object = event.currentTarget.selectedItem;

    var dragImg:Image = new Image();
    dragImg.load(current.imagePath);
    dragImg.width = 100; 
    dragImg.width = 100;

    var dsource:DragSource = new DragSource();
    dsource.addData(current, 'record');

    DragManager.doDrag(event.currentTarget as DataGrid, dsource, event, dragImg);
}

如果我将图像源设置为以下可绑定变量但我不想对图像名称进行硬编码,则此方法非常有效。

[Bindable] 
[Embed(source='assets/icons/default.jpg')]
public var dragIcon:Class;

...
dragImg.source = dragIcon
...  

1 个答案:

答案 0 :(得分:0)

在dragCurrentToList方法中,为什么要加载图像而不是仅将source属性指定为图像的URL?

http://livedocs.adobe.com/flex/3/langref/mx/controls/SWFLoader.html#source

private function dragCurrentToList(event:MouseEvent):void 
{                
    var current:Object = event.currentTarget.selectedItem;

    var dragImg:Image = new Image();
    dragImg.source = current.imagePath;
    dragImg.width = 100; 
    dragImg.width = 100;

    var dsource:DragSource = new DragSource();
    dsource.addData(current, 'record');

    DragManager.doDrag(event.currentTarget as DataGrid, dsource, event, dragImg);
}

还要确保您正在响应dragStart事件。 (http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html#event:dragStart)。而且我相信不是访问DragManager类;您应该只修改dragStart事件的dragSource属性。