Frage

Ich habe eine Drag & Drop-Handler in meiner Flex-Anwendung. Die Drag-Proxy oder das Bild ‚Geist‘ während des Ziehens, angezeigt werden müssen geladen werden, bevor ich ziehen, und das dauert einige Zeit. Wie kann ich es sofort oder Vorspannung machen laden? Eine Lösung ist, um das Bild zu duplizieren, aber soweit ich weiß, Bildobjekte können nicht ohne die Schaffung eines andere Variable kopiert werden, das noch einige Zeit dauern, muss geladen werden.

Vielleicht ist dieser Code wird es besser illustrieren:

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);
}
War es hilfreich?

Lösung

Ich glaube, das Problem ist, dass Sie nicht eine Breite und Höhe für das Bild (irgendwie überflüssig für eingebettete Bilder) Einstellung:

  

dragimage: IFlexDisplayObject (default = null) - Das Bild zu ziehen. Dieses Argument ist optional. Wenn angegeben wird, wird ein Standard-Drag Rechteck während der Drag & Drop-Operation verwendet. Wenn Sie ein Bild angeben, müssen Sie explizit eine Höhe und Breite des Bildes gesetzt, sonst wird es nicht angezeigt .

Wenn Sie eine Breite und eine Höhe für das Bild-Proxy in Ihrem Beispiel zu definieren, wird es wahrscheinlich funktionieren:

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

Andere Tipps

Sie sind besser dran, eine Bitmap-Erfassung des Bildes mit und die Verwendung dieser als dragProxy. Hier ist ein einfacher Code, um die BitmpData von jedem UIComponent zu erfassen:

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

Wenn Sie das haben, können Sie eine neue Bitmap erstellen die Bitmapdata verwenden und die Bitmap als Quelle eines Image-Komponente liefern. Weitere Details / Beispiele in diesem Blog-Eintrag:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top