Domanda

Ho un gestore di trascinamento della selezione nella mia applicazione Flex. Il proxy di trascinamento, o l'immagine "fantasma" da visualizzare durante il trascinamento, deve essere caricato prima del trascinamento e ciò richiede del tempo. Come posso caricarlo immediatamente o precaricarlo? Una soluzione è duplicare l'immagine, ma per quanto ne so, gli oggetti immagine non possono essere duplicati senza creare un'altra variabile, che deve ancora impiegare del tempo per caricarsi.

Forse questo codice lo illustrerà meglio:

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);
}
È stato utile?

Soluzione

Credo che il problema sia che non stai impostando una larghezza e un'altezza per l'immagine (in qualche modo ridondante per le immagini incorporate):

  

dragImage: IFlexDisplayObject (default = null) - L'immagine da trascinare. Questo argomento è facoltativo. Se omesso, durante l'operazione di trascinamento viene utilizzato un rettangolo di trascinamento standard. Se specifichi un'immagine, devi impostare esplicitamente un'altezza e una larghezza dell'immagine altrimenti non verrà visualizzata .

Se nel tuo esempio definisci una larghezza e un'altezza per il proxy Image, probabilmente funzionerà:

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

Altri suggerimenti

Stai meglio usando una cattura bitmap dell'immagine e usandola come dragProxy. Ecco un semplice codice per acquisire BitmpData da qualsiasi componente UIC:

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;  
}

Una volta ottenuto ciò, è possibile creare una nuova Bitmap utilizzando BitmapData e fornire Bitmap come origine di un componente Image. Maggiori dettagli / esempi in questo post del blog:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top