Flex:复制图像的实例

时间:2009-05-02 20:17:05

标签: flex image proxy duplicates drag

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

2 个答案:

答案 0 :(得分:3)

我认为问题是你没有为图像设置宽度和高度(对于嵌入的图像来说有点多余):

  

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

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

var dragProxy : Image = new Image ();
dragProxy.source = dragInitiator.source;
dragProxy.width = dragInitiator.width;
dragProxy.height = dragInitiator.height;

答案 1 :(得分: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