Pregunta

Tengo un controlador de arrastrar y soltar en mi aplicación Flex. El proxy de arrastre, o la imagen 'fantasma' que se mostrará mientras se arrastra, debe cargarse antes de que yo arrastre, y eso lleva algún tiempo. ¿Cómo puedo hacer que se cargue inmediatamente o precargar? Una solución es duplicar la imagen, pero por lo que sé, los objetos de imagen no pueden duplicarse sin crear otra variable, que aún debe tomar algún tiempo para cargar.

Quizás este código lo ilustrará mejor:

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);
}
¿Fue útil?

Solución

Creo que el problema es que no estás configurando un ancho y alto para la imagen (de alguna manera redundante para las imágenes incrustadas):

  

dragImage: IFlexDisplayObject (default = null) - La imagen a arrastrar. Este argumento es opcional. Si se omite, se utiliza un rectángulo de arrastre estándar durante la operación de arrastrar y soltar. Si especifica una imagen, debe establecer explícitamente el alto y el ancho de la imagen o, de lo contrario, no aparecerá .

Si define un ancho y una altura para el proxy de imagen en su ejemplo, probablemente funcionará:

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

Otros consejos

Es mejor utilizar una captura de mapa de bits de la imagen y usarla como su DragProxy. Aquí hay un código simple para capturar el BitmpData desde cualquier 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;  
}

Una vez que tenga eso, puede crear un nuevo mapa de bits utilizando BitmapData y proporcionar el mapa de bits como la fuente de un componente de imagen. Más detalles / ejemplos en esta publicación de blog:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top