
04.01.2014, 15:21
|
|
Регистрация: Apr 2012
Сообщений: 44
|
Перемещение, ресайзинг и т.п. объектов с помощью мыши.
Здравствуйте.
Необходимо сделать некий компонент, который поддерживает рисование в нем прямоугольников их перемещение и изменение размеров. Все с помощью мыши. Несмотря на то, что задача довольно простая - у меня возникли с ней некоторые трудности.
Я год не разрабатывал на флексе, поэтому первым делом появилась такая идея: иметь некий контейнер фиксированного размера; иметь некий компонент, который будет отвечать за отрисовку прямоугольников их перемещение и изменение размеров, будет помещаться в описанный ранее контейнер и занимать всю его высоту и ширину. В компоненте-прямоугольнике я хотел в mxml описать собственно сам прямоугольник и 4 квадрата по бокам, которые будут выполнять роль рамки для ресайзинга, как-то по-хитрому забайндить их координаты и размеры между собой и применить стандартный механизм пермещения - startDrag/stopDrag. Тут же всплыл первый подводный камень - во время перетаскивания координаты объекта не меняются (ведь создается временный объект) и соответственно координаты и размерности прямоугольника не обновляются.
Хорошо. Я написал свою обработку событий мыши в компоненте-прямоугольнике. Сейчас имеется различие нажатий на рамку, прямоугольник, перемещение, ресайзинг и т.п. Но, всплыл другой "косяк" - компонент-прмоугольник занимает всю ширину/высоту контейнера, в то время как сам прямоугольник внтри него мал. Т.е. у меня огромная прозрачная зона, которая либо перехватывает все события от мыши, либо нет. В первом случае из всех компонентов-прямоугольников из контейнера я могу работать только с одним ("верхним"). Во втором при захвате и перемещении рамки или границы курсор часто выходит за пределы отрисованной зоны и попадает в зону прозрачности, которая событий от мыши не получает и соотвественно происходят застревания.
Как лучше всего решить поставленную задачу? Могу предоставить код, который я уже написал.
|