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