![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
У нас есть:
Правильно "заресайзить" некоторые константы. Например, есть константа BUTTON_OFFSET. Чтобы получить её на маленьком экране я пишу BUTTON_OFFSET / Content.scaleFactor. Это как-то некрасиво что-ли. Сейчас делаю так: public static function getBackButtonOffset():int { return BACK_BUTTON_OFFSET / Content.scaleFactor; } Но это тоже как-то не очень. Какие у вас есть варианты? |
|
|||||
|
Banned
Регистрация: Aug 2014
Сообщений: 461
|
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Хоть Content.scaleFactor не изменяется в процессе работы приложения, он рассчитывается в рантайме.
Так что такой вариант не подойдёт. |
|
|||||
|
Banned
Регистрация: Aug 2014
Сообщений: 461
|
Если так не нравится, то сделайте вот так -
const DEFAULT_SCALE:int = 1; const BUTTON_OFFSET:int = DEFAULT_SCALE:int / Content.scaleFactor; Дело в том, что константы задают только для того, чтобы компилятор их винлайнел в место вызова. Если такое условие не выполняется, то значит константа просто не нужна. И Ваш вариант с getBackButtonOffset тоже не может быть заменой константе, так как не инлайнится, то есть не выполняет задачу константы и так же такая запись вообще каждый раз считает условие. Вот такой get можно присваивать какой-то константе... Чет я фигню сказал о ТОЛЬКО для инлайна Главная цель неизменяемость.Сделайте getter, то же не меняется. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Я знаю для чего нужна константа
![]() Я говорю как правильно и красиво решить проблему, чтобы не плодить на кажду константу геттер. Но это пока что лучший для меня вариант. |
|
|||||
|
А че тут сложного? Определяете константы метрических параметров для "стандартного" (по Вашему мнению или по задумке дизайнера) размера экрана. А потом для каждого события ресайза пересчитываете эти самые метрики и сохраняете их в соответсвующих переменных. Само собой, что приложение будет пользоваться переменными, а не константами. Если ресайз случится только на старте (подгонка под выделеный размер), то все круто. Но если есть возможность ресайзить в прцессе жизненного цикла прилжения, то есть два варианта:
|
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Ребят, вы не ту проблему решаете)
Я уже всё сделал, мне интересно как красивее обернуть константу. Перечитайте мой пост. ЗЫ.: scaleFactor уже дан, он рассчитывается один раз вначале. Экраны устройства статичные, не думаю что кто-то на андроид сможет поменять размер экрана во время работы приложения. Потому и рассчитывается всего один раз. Добавлено через 3 минуты То есть меня интересует как бы вы поступили: 1. Создали перменную , которая будет равна константе / scale factor. 2. "Константа" изначально будет переменной и потом после расчёта scale factor я делю все "константы" на него. 3. Геттер, который возвращает константу поделенную на скейл фактор 4. ??? |
|
|||||
|
Не пойму, что красивого в получении значения параметра не через переменную/константу, а через вызов геттер-функции, если эта функция просто лишняя. Эх, посадить бы вас за мой старый комп, да подключить еще к нему слабенькую батарейку, вместо запитки от электор-сети, и под дулом пистолет заставить какой нибуть аляповатый шутер с открытым миром наваять, да так чтобы фпс не меньше 60
.Геттер, который возвращает наперед извесное значение (будь то скрывающееся за ним значение переменной или даже значение переменной, РАЗДЕЛЕННОЕ на жестко заданое значение) - это защита от дурака. Просто бьем по рукам жирным Еррором, если кто захочет поменять значение или определяем сеттер, который сможет произвести изменения по Вашему гениальному плану. Но такой подход имеет смысл, когда разрабатывается какой нибудь движок или фреймворк, реализацию внутренностей которого другие не знают, а Вы забудете месяца эдак через два. В противном же случае... Понимаю, что форум наш очень даже порядочный, но! Тупое следование стандартам или моде похоже на совокупление с родной бесплодной женой в презервативе с целью предотвращения нежелательной беременности ![]() Короче, конечному пользователю плевать на красоту и стройность Вашего кода, так как он получает его в компилированом варианте. И, как это не печально, за нормально работающее приложение Вас тоже никто по головке не погладит. Но если же Ваше детище доставит юзверям неудобства, то икать Вам прийдется очень долго. И дай бог, чтобы икота прошла еще при жизны, ато икающий труп, бьющийся лбом о крышку гроба - то еще зрелище. А об ориентации экрана Вы ничего не слышали? АхВ похоже на ВхА только в случае квадрата! А если Ваше приложение жестко ориентировано, то что Вам не нравится в кешированиии нужных значений и подталкивает к глупому пересчету параметру каждый раз, когда к ним обращаются? |
|
|||||
|
Banned
Регистрация: Aug 2014
Сообщений: 461
|
Первое, я не правильно понял вопрос и ответ дал тоже неправильный.
Второе, Вы спросили вообще не пойми чего. Как красиво сделать константу... А делаете геттер. При чем тут константа?) И или я опять не понял или Вы спросили - И Вы даже не геттер, а обычный метод называете константой. |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 319
|
чтоб было красивее я бы вообще не делал какие то константы конкретно для какой то кнопки или элементов интерфейса.
а писал бы прям в лоб. тут надо исходить из того сколько раз эти специфичные константы будут использоваться если один раз на один элемент, то красивее и удобнее и быстрее написать формулу позиционирования в месте позиционирования. и константу BACK_BUTTON_OFFSET я бы тоже не заводил. просто выделил бы позиционирование элементов в отдельный метод для каждого контейнера этих элементов. а если прям совсем хочется отделить то в коде ты не думаешь что это геттер и пишешь так же как писал раньше |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:58. |
|
|
« Предыдущая тема | Следующая тема » |
|
|