0

我的 Flex 应用程序中有一个拖放处理程序。拖动代理或拖动时要显示的“幽灵”图像必须在我拖动之前加载,这需要一些时间。我怎样才能让它立即加载或预加载?一种解决方案是复制图像,但据我所知,如果不创建另一个变量,就无法复制图像对象,这仍然需要一些时间来加载。

也许这段代码会更好地说明它:

public function DragApp (e : MouseEvent) : void {
    var dragInitiator : Image = e.currentTarget as Image;
    var dragSource : DragSource = new DragSource ();

    var dragProxy : Image = new Image ();
    dragProxy.source = e.currentTarget.source; // Won't work unless image is embedded
    dragProxy.load (e.currentTarget.source); // Must load

    setTimeout (DragManager.doDrag, 350, dragInitiator, dragSource, e, dragProxy);
}
4

2 回答 2

3

我相信问题是您没有为图像设置宽度和高度(对于嵌入式图像来说有点多余):

dragImage:IFlexDisplayObject (default = null) — 要拖动的图像。此参数是可选的。如果省略,则在拖放操作期间使用标准拖动矩形。如果指定图像,则必须显式设置图像的高度和宽度,否则不会出现

如果您在示例中为 Image 代理定义宽度和高度,它可能会起作用:

var dragProxy : Image = new Image ();
dragProxy.source = dragInitiator.source;
dragProxy.width = dragInitiator.width;
dragProxy.height = dragInitiator.height;
于 2009-05-02T20:51:24.823 回答
2

您最好使用图像的位图捕获并将其用作您的 dragProxy。下面是一些从任何 UIComponent 中捕获 BitmpData 的简单代码:

private function getUIComponentBitmapData( target : UIComponent ) : BitmapData
{ 
    var bd : BitmapData = new BitmapData( target.width, target.height );
    var m : Matrix = new Matrix();
    bd.draw( target, m );
    return bd;  
}

一旦你有了它,你可以使用 BitmapData 创建一个新的 Bitmap 并将 Bitmap 提供为 Image 组件的源。此博客文章中的更多详细信息/示例:

http://www.cynergysystems.com/blogs/page/andrewtrice?entry=flex_2_bitmapdata_tricks_and

于 2009-05-02T21:19:04.943 回答