Вопрос

В моем приложении Flex есть обработчик перетаскивания. Прокси-перетаскивание или «призрачное» изображение, которое будет отображаться при перетаскивании, должно быть загружено перед перетаскиванием, и это занимает некоторое время. Как я могу заставить его загружаться немедленно или предварительно загрузить? Одним из решений является дублирование изображения, но, насколько я знаю, объекты изображения не могут быть продублированы без создания другой переменной, которая все равно должна занять некоторое время для загрузки.

Возможно, этот код проиллюстрирует это лучше:

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);
}
Это было полезно?

Решение

Думаю, проблема в том, что вы не устанавливаете ширину и высоту для изображения (как-то избыточно для встроенных изображений):

  

dragImage: IFlexDisplayObject (по умолчанию = null) & # 8212; Изображение для перетаскивания. Этот аргумент не является обязательным. Если опущен, стандартный прямоугольник перетаскивания используется во время операции перетаскивания. Если вы укажете изображение, вы должны явно указать высоту и ширину изображения, иначе оно не будет отображаться .

Если вы определите ширину и высоту для прокси-сервера Image в вашем примере, он, вероятно, будет работать:

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

Другие советы

Лучше использовать растровый захват изображения и использовать его в качестве dragProxy. Вот простой код для захвата BitmpData из любого 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;  
}

Получив это, вы можете создать новое растровое изображение, используя BitmapData, и предоставить растровое изображение в качестве источника компонента Image. Подробнее / примеры в этом блоге:

http://www.cynergysystems.com/blogs/page/andrewtrice ? = запись flex_2_bitmapdata_tricks_and

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top