フレックス:画像のインスタンスを複製する
-
03-07-2019 - |
質問
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);
}
解決
問題の原因は、画像の幅と高さを設定していないことだと思います(埋め込み画像では何らかの理由で冗長です):
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を使用して新しいビットマップを作成し、ビットマップをイメージコンポーネントのソースとして提供できます。このブログ投稿の詳細/例:
http://www.cynergysystems.com/blogs/page/andrewtrice ?entry = flex_2_bitmapdata_tricks_and