2010-06-27 2 views
0

DataGrid에서 Flex 3 AIR 응용 프로그램의 List로 드래그 앤 드롭을 구현하고 있습니다. 드래그 이미지를 'imagePath'라는 데이터 격자 항목의 String 필드에서 참조하는 사진 (jpg)으로 만들고 싶습니다. 드래그하는 동안 이미지가 표시되는 데 문제가 있습니다. 나는 그것이 이미지에 대한 무효 경로 때문에가 아니라는 것을 확인했다. 내가 생각할 수있는 모든 방법으로 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 
... 

답변

0

dragCurrentToList 메서드에서 source 속성을 이미지의 URL로 지정하는 대신 이미지를로드하는 이유는 무엇입니까?

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

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

또한 당신이 단지 dragStart 이벤트에 대응하고 있는지 확인하십시오. ( http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html#event:dragStart). DragManager 클래스에 액세스하는 대신 믿습니다. dragStart 이벤트의 dragSource 속성을 간단히 수정해야합니다.

+0

고마워요,하지만 그걸 시도했습니다. 아마도 imagePath가 클래스가 아니기 때문일 수 있습니다. 시도 : dragImg.source = contact.imagePath; 및 dragImg.source = "assets/icons/default.jpg"; dragImg.source = "@Embed (source = 'assets/icons/default.jpg')" 모두 동일한 동작을합니다. 드래그 할 때 아무 것도 표시되지 않고 콘솔에는 아무것도 표시되지 않습니다. 예, dragStart에 응답하도록 전환했습니다. 말이된다. – cafe101

+0

http://livedocs.adobe.com/flex/3/html/help.html?content=dragdrop_5.html – cafe101

+0

에 따라 dragStart를 사용하는 방법에 대해 살펴 보겠습니다. Flextras DataSorter에서 코드를 가져 와서 비슷한 접근법 [즉석에서 비트 맵 데이터를 생성합니다. 그래도 항목의 이미지 데이터를 참조하지 않습니다.] dragImage 데이터는 DragManager.doDrag 함수를 사용하여 dragStartHandler에 설정됩니다. 그러나, dragImage는 getter입니다. dragStageEvent를 사용하여 dragImage getter를 재정의 할 수 있습니까? dragEvent를 사용하기로 결정했다면 dragImage를 설정하려고하는 두 개의 경쟁 코드 섹션이 없도록 기존의 dragStartHandler를 재정의해야합니다. – JeffryHouser