Flex: дублирование экземпляра изображения - PullRequest
0 голосов
/ 03 мая 2009

В моем приложении 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);
}

Ответы [ 2 ]

3 голосов
/ 03 мая 2009

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

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

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

var dragProxy : Image = new Image ();
dragProxy.source = dragInitiator.source;
dragProxy.width = dragInitiator.width;
dragProxy.height = dragInitiator.height;
2 голосов
/ 03 мая 2009

Вам лучше использовать растровый захват изображения и использовать его в качестве 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?entry=flex_2_bitmapdata_tricks_and

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...