|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2010
Сообщений: 85
|
Пропорциональное изменение ширины у загруженного объекта и его дочерних элементов
Загружаю swf с изображением кнопки. Внутри большой кнопки находятся ещё две маленькие кнопки
Нужно растягивать по ширине только саму основу кнопки не меняя размеры двух маленьких кнопок. Кнопки в итоге собой представляют некий список и находятся все в едином контейнере. Поэтому я пытаюсь изменять ширину у контейнера, чтобы разом изменить ширину у всех кнопок находящихся в контейнере, но при этом форма двух маленьких кнопок тоже растягивается. Есть варианты, как это сделать? |
|
|||||
Регистрация: Mar 2009
Сообщений: 207
|
Очевидно менять только ширину основы кнопки, а не самой кнопки и уж тем более не контейнера.
|
|
|||||
Регистрация: Oct 2010
Сообщений: 85
|
Тогда придется каждую кнопку в отдельности ресайзить, т.к. кнопки могут как удаляться, так и добавляться в контейнер (число их не ограничивается).
Я думаю есть более продуктивный способ, к примеру, изменив ширину основы у одной кнопки, все остальные кнопки об этом узнали и тоже изменили ширину. Может есть другие варианты? По началу я пытался использовать scale9grid, но у меня он совершенно не работал, возможно потому что в этой ситуации он не пригоден. |
|
|||||
Регистрация: Mar 2009
Сообщений: 207
|
Если вам надо чтобы растягивался только фон, то и растягивать надо только фон.
Другой вопрос как вы это организуете. Можно set-функцию сделать в классе, в которой регулировать ширину фона, можно в конструктор класса входным параметром ширину загнать, можно кастомное событие с параметром ширины рассылать всем кнопкам или типа того. Но что то мне подсказывает, что с классами, а тем более кастомными событиями вы не сталкивались еще. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 10.07.2011 в 13:15. |
|
|||||
Регистрация: Oct 2010
Сообщений: 85
|
Цитата:
Вот, что такое кастомное событие без понятия, или вы имеете в виду флешевую диспетчерезацию? Можно по подробнее. Wolsh, ресайз одной кнопки, это как бы не проблема. Вопрос в том, как ресайзить их все разом не делая при этом лишних телодвижений. Я, к сожалению, не понял сакраментальной необходимости в сеттере, поэтому разродился на два своих варианта, но я уверен, что можно все организовать гораздо более верным способом, надеюсь на понимание. Перерисовывать графику кнопки/кнопок нет необходимости, так как, повторюсь, кнопки грузятся из свф Первый вариант Класс CList - реализует список кнопок ->> for(var i:int = 0; i < 4; i++){ cListView = new CListView(); addChild(cListView); cListView.y = Number(cListView.height)*i; arrTitle.push(cListView); } public function updateWidth(value:int):void { for each (var obj:Object in arrTitle) { obj.widthFoo(value) } } В цикле создаются экземпляры кнопок и записываются ссылками в массив. Метод updateWidth() вызывается, когда изменяется ширина окна в котором находятся кнопки, которые так же должны менять свою ширину(ширина кнопок идентична ширину окна). При помощи цикла фор ич у всех экземпляров через ссылки вызывается метод widthFoo() в классе кнопки CListView и передаются новые размеры окна. Этот вариант мне кажется не верным, т.к. необходимо очень часто вызывать метод updateWidth() и соответственно цикл. Второй вариант Класс CList - реализует список кнопок ->> for(var i:int = 0; i < 4; i++){ cListView = new CListView(); addChild(cListView); cListView.y = Number(cListView.height)*i; } public function updateWidth(value:int):void { CListView._value = value } Но для того чтобы актуальная информация этой переменной была реализована, в классе кнопки CListView вызывается enterframe постоянно, что очень напрягает, как меня так и процессор, тем более если учесть, что кнопок этих может быть значительное кол-во. Пока что актуален первый вариант. Было бы интересно прочитать комментарии по этим вариантам. Интересуют другие предложения. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Свойство height класса CListView Вы же переопределили (иначе зачем это странное приведение Number к Number). Почему же не сделать один правильный сеттер width, правильно меняющий ширину? Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2010
Сообщений: 85
|
Цитата:
Я предпочитаю имя-отчество. function creatChildGenadiyVasilevich():void { bornChildOlgaNikolaevna() } function bornChildOlgaNikolaevna():void { bornChildName(NikitaVasilevich) } Извините, за срамной код, это черновик, я не особо задумываюсь над названием методов, хотя это целая наука) во время рефакторинга постараюсь все исправить. Цитата:
Цитата:
Если кнопку рисовать, а не грузить, код в классе кнопки ->> public function set widthFoo(value:int):void{ g.clear(); g = this.graphics; g.beginFill(0xFFFFFF); g.drawRect(0,0,value,20); g.endFill(); } Цитата:
Но мне этот вариант с частым вызовом цикла, все-таки не нравится. Ведь он вызывается постоянно, когда я зажимаю кнопку для растягивания окна и веду мышь (mouseMove) С вибрирующем восьмиэтажным механизмом вы в точку попали так и есть. Если у вас найдется время, покажите примерно, что вы имеете в виду под правильным сеттером, я видимо чего-то не понимаю. Пусть до меня и не все доходит, что вы предлагаете, ваши ответы каким-то магическим образом помогают выбрать правильный путь |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
public override function set width(value:int):void{ g = this.graphics; g.clear(); g.beginFill(0xFFFFFF); g.drawRect(0,0,value,20); g.endFill(); // так же здесь переставляем внутренние элементы по новым местам } И вообще, кто бы откуда ни попытался изменить ширину кнопки, получит ее правильно преобразованной - расширенной, а не растянутой. Никакого предательского метода width теперь просто нет. Есть только правильный. И если честно, я не понял почему обязательно перерисовывать (хотя сам всегда так и делаю, но я вообще не пользуюсь IDE, то есть рисую все кодом или встраиваю битмап). Растягивать клипик, засунутый на фон в кнопку, думаю ничем не сложнее. Надо только дать ему имя и включить enable 9Grid scaling, если надо.
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 20:19. |
|
« Предыдущая тема | Следующая тема » |
|
|