0

Flex アプリケーションにドラッグ アンド ドロップ ハンドラがあります。ドラッグ プロキシ、またはドラッグ中に表示される「ゴースト」イメージは、ドラッグする前にロードする必要があり、それには時間がかかります。すぐにロードまたはプリロードするにはどうすればよいですか? 1 つの解決策は画像を複製することですが、私の知る限り、別の変数を作成しないと画像オブジェクトを複製することはできず、読み込みに時間がかかります。

おそらく、このコードはそれをよりよく示しています:

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(デフォルト= 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を使用して新しいビットマップを作成し、画像コンポーネントのソースとしてビットマップを提供できます。このブログ投稿の詳細/例:

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

于 2009-05-02T21:19:04.943 に答える