|
|
|||||
Регистрация: Sep 2012
Сообщений: 26
|
UI/ Контейнеры
Какие контейнеры лучше использовать в приложении с простым GUI? Хочу на их базе сверстать Header, Content, Footer. Что бы можно было менять их свойства типа BackgroudColor, BorderColor и чтобы контролы внутри них имели относительные контейнера размеры. Например, изменил размер хедера -> изменилось расположение кнопки.
начал писать свой класс, но может есть что-то готовое уже? да и не уверен я за свой контейнер.. public class Container extends Sprite { public function Container(w:Number=0,h:Number=0) { _width = w; _height = h; } protected: var _background:Sprite = new Sprite();; var _border:Sprite = new Sprite(); var _height:Number = 0; var _width:Number = 0; var _borderThickness:Number = 1; var _borderColor:uint = 0x000000; var _backgroundColor:uint = 0xFFFFFF; public function set Height(height:Number) { _height = height; Init(); } public function set Width(width:Number) { _width = width; Init(); } public function get Height():Number { return _height; } public function get Width():Number { return _width; } public function set BorderThickness(thickness:Number) { _borderThickness = thickness; Init(); } public function set BorderColor(color:uint) { _borderColor = color; Init(); } public function set BackgroundColor(color:uint) { _backgroundColor = color; Init(); } public function Init() { _background.graphics.clear(); _background.graphics.beginFill(_backgroundColor); _background.graphics.drawRect(0, 0, _width, _height); addChild(_background); _border.graphics.clear(); _border.graphics.lineStyle(_borderThickness, _borderColor); _border.graphics.drawRect(0, 0, _width, _height); addChild(_border); } public class HeaderMenu extends Container { var btnLoad:Button = new Button(); public function HeaderMenu(w:Number, h:Number) { super(w,h); _backgroundColor = 0xE13737; btnLoad.label = 'Загрузить SWF'; Init(); } public override function Init() { super.Init(); btnLoad.x = 10; btnLoad.y = Height / 2 - btnLoad.height / 2; addChild(btnLoad); } } Да и в таком случае, если я меняю цвет фона контейнера (через свойство базового класса), помимо перерисовки фона и рамки ещё заново перерасчитаются координаты кнопки. а это уже лишнее. Контролы должны перестраиваться только при изменении размера контейнера. Добавлено через 1 час 1 минуту можно разбить Init() на две функции. одна будет перерисовывать фон и рамку и вызываться при изменение любого свойства , а вторая виртуальная будет перестраивать контролы и вызываться только при изменении Height, Width. Работать будет, но может плюнуть и воспользоваться каким-нибудь готовым решением? Последний раз редактировалось Unkeep; 19.06.2013 в 14:15. |
|
|||||
Нужно реализовать что-то типа commitProperties и invalidate, как во Flex
Т.е. обновлять только те свойства, которые менялись. Это разумеется добавляет больше кода, но стоит того, если ради оптимизации.
__________________
adobe AS3 manual |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
посмотри на
http://sibirjak.com/osflash/projects...ns-ui/layouts/ http://www.as3commons.org/as3-commons-ui/index.html
__________________
Отряд Котовскага |
|
|||||
Цитата:
А если это игра - то забудьте про валидацию, не создавайте себе проблем, лучше вручную вызовите свойство UpdateSize() после добавления детей или если какой-то компонент должен занять больше/меньше пространства. Тупо меньше багов будет и времени меньше убъёте. Валидация будет мешеать воплощать то, что нарисовал диз. И с первого раза без опыта систему валидации нормальную не сделать. Самая нормальная валидация реализована во Flex, но и там оно бажит и требует очень хорошо себя знать при написании компонентов. А то что сделано в AsWing - это вообще тихий ужас - оно никогда нормально не обновляло размеры. Так что либо Flex - либо ручками. |
|
|||||
flex, там уже все написано
|
Часовой пояс GMT +4, время: 13:58. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|