Question

J'ai un gestionnaire glisser-déposer dans mon application Flex. Le proxy de glissement, ou l'image "fantôme" à afficher pendant le glissement, doit être chargé avant que je glisse, ce qui prend un certain temps. Comment puis-je le charger immédiatement ou le précharger? Une solution consiste à dupliquer l’image, mais pour autant que je sache, les objets d’image ne peuvent pas être dupliqués sans créer une autre variable, dont le chargement nécessite encore un certain temps.

Peut-être que ce code l'illustrera mieux:

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);
}
Était-ce utile?

La solution

Je pense que le problème est que vous ne définissez pas de largeur et de hauteur pour l'image (en quelque sorte redondant pour les images incorporées):

  

dragImage: IFlexDisplayObject (default = null) - Image à faire glisser. Cet argument est optionnel. Si omis, un rectangle standard est utilisé lors de l’opération glisser-déposer. Si vous spécifiez une image, vous devez définir explicitement sa hauteur et sa largeur, sinon elle n'apparaîtra pas .

Si vous définissez une largeur et une hauteur pour le proxy d'image dans votre exemple, cela fonctionnera probablement:

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

Autres conseils

Il vaut mieux utiliser une capture d'image bitmap et l'utiliser comme dragProxy. Voici un code simple pour capturer les BitmpData à partir de n’importe quel composant UIComponent:

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

Une fois que vous avez cela, vous pouvez créer un nouveau bitmap à l'aide de BitmapData et le fournir en tant que source d'un composant Image. Plus de détails / exemples dans cet article de blog:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top