Показать сообщение отдельно
Старый 19.06.2013, 14:01
Unkeep вне форума Посмотреть профиль Отправить личное сообщение для Unkeep Найти все сообщения от Unkeep
  № 1  
Ответить с цитированием
Unkeep
 
Аватар для Unkeep

Регистрация: Sep 2012
Сообщений: 26
По умолчанию UI/ Контейнеры

Какие контейнеры лучше использовать в приложении с простым GUI? Хочу на их базе сверстать Header, Content, Footer. Что бы можно было менять их свойства типа BackgroudColor, BorderColor и чтобы контролы внутри них имели относительные контейнера размеры. Например, изменил размер хедера -> изменилось расположение кнопки.
начал писать свой класс, но может есть что-то готовое уже? да и не уверен я за свой контейнер..
Код AS3:
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);
		}
хедер

Код AS1/AS2:
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);
		}
 
	}
Добавлено через 11 минут
Да и в таком случае, если я меняю цвет фона контейнера (через свойство базового класса), помимо перерисовки фона и рамки ещё заново перерасчитаются координаты кнопки. а это уже лишнее. Контролы должны перестраиваться только при изменении размера контейнера.

Добавлено через 1 час 1 минуту
можно разбить Init() на две функции. одна будет перерисовывать фон и рамку и вызываться при изменение любого свойства , а вторая виртуальная будет перестраивать контролы и вызываться только при изменении Height, Width. Работать будет, но может плюнуть и воспользоваться каким-нибудь готовым решением?


Последний раз редактировалось Unkeep; 19.06.2013 в 14:15.