开发者

How to dynamically load image for drag and drop?

开发者 https://www.devze.com 2023-01-05 02:19 出处:网络
I am implementing drag and drop from a DataGrid onto a List in a Flex 3 AIR application. I would like to have the drag image be a photo (jpg) referenced by a String field in the data grid item, named

I am implementing drag and drop from a DataGrid onto a List in a Flex 3 AIR application. I would like to have the drag image be a photo (jpg) referenced by a String field in the data grid item, named 'imagePath'. I'm having trouble getting the image to show up during dragging. I have triple checked that it is not because of an invalid path to the image. I have tried Image's source() and load() methods in every way I can think of. I am calling this method 'dragCurrentToList(event)' on a开发者_Go百科 mouseDown 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);
}

This works perfectly if I set the image source to the following bindable variable but I don't want to hardcode the image name.

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

...
dragImg.source = dragIcon
...  


In your dragCurrentToList method, why are you loading the image instead of just specifying the source attribute as the URL to the image?

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);
}

Also make sure you are responding to the dragStart event. ( http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html#event:dragStart ). And I believe instead of accessing the DragManager class; you should simply modify the dragSource property of the dragStart event.

0

精彩评论

暂无评论...
验证码 换一张
取 消