【问题标题】:Flex: Duplicating instance of an imageFlex:复制图像的实例
【发布时间】:2010-10-23 08:46:36
【问题描述】:

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

【问题讨论】:

    标签: apache-flex image proxy duplicates drag


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!这解决了我的问题!但是为什么当我将doDrag置于超时时会出现图像?我认为它必须创建图像的另一个实例并首先加载它。图像是否在某个点自动设置其宽度和高度?
    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多