Apache flex Flex:复制图像的实例

Apache flex Flex:复制图像的实例,apache-flex,image,proxy,duplicates,drag,Apache Flex,Image,Proxy,Duplicates,Drag,我的Flex应用程序中有一个拖放处理程序。拖动代理或拖动时显示的“重影”图像必须在拖动之前加载,这需要一些时间。如何使其立即加载或预加载?一种解决方案是复制图像,但据我所知,如果不创建另一个变量,就无法复制图像对象,这仍然需要一些时间才能加载 也许这段代码可以更好地说明这一点: public function DragApp (e : MouseEvent) : void { var dragInitiator : Image = e.currentTarget as Image;

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

我认为问题在于您没有为图像设置宽度和高度(对于嵌入的图像来说有些冗余):

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

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

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

我认为问题在于您没有为图像设置宽度和高度(对于嵌入的图像来说有些冗余):

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

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

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

最好使用位图捕获图像并将其用作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创建新的位图,并将该位图作为图像组件的源提供。更多详细信息/示例,请参见本文:


最好使用图像的位图捕获并将其用作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创建新的位图,并将该位图作为图像组件的源提供。更多详细信息/示例,请参见本文:


谢谢!这解决了我的问题!但是,当我将doDrag放入超时时,为什么会出现此图像?我认为它必须创建图像的另一个实例并首先加载它。图像是否在某个点自动设置其宽度和高度?谢谢!这解决了我的问题!但是,当我将doDrag放入超时时,为什么会出现此图像?我认为它必须创建图像的另一个实例并首先加载它。图像是否在某个点自动设置其宽度和高度?