Добавление графических объектов в коллекцию в Flex 4 - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь сделать аннотации к изображению.Я хочу сохранить все эти аннотации в коллекции, чтобы впоследствии я мог удалить или редактировать конкретную заметку (аннотацию).

Я создаю экземпляр UIComponent, например markUp, и выполняю

 markUp.graphics.lineStyle(2, drawColor);
 markUp.graphics.moveTo(x1, y1);
 markUp.graphics.lineTo(x2, y2);

Я хочу создавать экземпляр UIComponent каждый раз, когда пользователь делает новую аннотацию на моем изображении.

Как создать динамический экземпляр и как сохранить его в коллекции.Любая помощь приветствуется.

1 Ответ

1 голос
/ 04 августа 2011

Из того, что я понимаю после разговора с Кишором:

Пользователи могут отмечать определенные области перетаскиванием мышью и соответственно добавлять комментарии.Разметка и комментарий хранятся в базе данных.

За один раз увеличивается только одно изображение, и это изображение должно отображать все разметки.Нажатие на разметку вызовет всплывающее окно, показывающее связанный комментарий.

Очевидно, что разметка является довольно дорогой, поэтому после рисования определенная разметка должна использоваться повторно, когда пользователь переключается между изображениями.Вопрос теперь:

Как повторно использовать пометки, отображаемые на изображении?

Ответ:

Использовать Object или Dictionary гдеВы создаете одну запись для каждого изображения, и эта запись указывает на Array наценок.Вы можете создать удобный класс для инкапсуляции функциональности этой карты:

package {
    import flash.display.DisplayObject;

    public class Markups {
        private var _map : Object;

        public function Markups() {
            _map = new Object();
        }

        public function addMarkup(imageId : String, markup : DisplayObject) : void {
            if (!_map[imageId]) _map[imageId] = new Array();
            (_map[imageId] as Array).push(markup);
        }

        public function hasMarkups(imageId : String) : Boolean {
            return _map[imageId] !== undefined;
        }

        public function getMarkups(imageId : String) : Array {
            return _map[imageId];
        }

        public function removeMarkup(imageId : String, markup : DisplayObject) : void {
            var markups : Array = _map[imageId];
            var index : int = markups.indexOf(markup);
            markups.splice(index, 1);
            if (!markups.length) delete _map[imageId];
        }
    }
}

Храните эту карту в месте, доступном из контейнера изображений.

var markupsPerImage : Markups = new Markups();

Добавьте или удалитеразметка выглядит следующим образом:

markupsPerImage.addMarkup(myImage.id, markupView);
markupsPerImage.removeMarkup(myImage.id, markupView);

Всякий раз, когда пользователь меняет текущее изображение, вы 1. очищаете все пометки последнего и 2. добавляете все пометки, хранящиеся на карте.

В контейнере изображения:

public function setImage(myImage : MyImage) : void {
    // remove markups
    while (markupContainer.numChildren) {
        markupContainer.removeChildAt(0);
    }
    // add markups
    var markups : Array = markupsPerImage.getMarkups(myImage.id);
    var markup : MarkupView;
    foreach (markups as markup) {
        markupContainer.addChild(markup);
    }
}

Примечания:

В примере кода предполагается, что у вас есть контейнер разметки, в котором размещены все разметки.Этот контейнер должен иметь ссылку на карту разметки.

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