Pergunta

Eu tenho um arrastar e manipulador queda no meu aplicativo Flex. O proxy de arrasto, ou a imagem 'fantasma' a ser exibido ao arrastar, deve ser carregada antes de me arrastar, e que leva algum tempo. Como posso fazê-lo carregar imediatamente ou pré-carga? Uma solução é duplicar a imagem, mas, tanto quanto eu sei, objetos de imagem não pode ser repetido sem criar outra variável, que ainda deve levar algum tempo para carregar.

Talvez este código irá ilustrar melhor:

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

Solução

Eu acredito que o problema é que você não está definindo uma largura e altura para a imagem (de alguma forma redundante para imagens embutidas):

dragImage: IFlexDisplayObject (default = null) - A imagem de arrasto. Esse argumento é opcional. Se omitido, um rectângulo arrasto padrão é utilizada durante a operação arrastar e soltar. Se você especificar uma imagem, você deve definir explicitamente a altura e largura da imagem ou então ele não vai aparecer .

Se você definir uma largura e uma altura para o proxy de imagem no seu exemplo, ele provavelmente irá trabalho:

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

Outras dicas

Você é melhor fora de usar uma captura de bitmap da imagem e usando isso como sua dragProxy. Aqui está um código simples para capturar a BitmpData de qualquer 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;  
}

Uma vez que você tem isso, você pode criar um novo Bitmap usando o BitmapData e fornecer o Bitmap como a fonte de um componente de imagem. Mais detalhes / exemplos neste post:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top