Flex: дублирование экземпляра изображения
-
03-07-2019 - |
Вопрос
В моем приложении 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