Урок 5. Создаём меню нашей игры.

Для начала создадим функционал нашего меню. После этого, для того, чтобы всё выглядело более приятным глазу, будем добавлять такие вещи, как анимация. Вот на что мы ориентируемся:

Прежде чем приступать к программированию разработаем макет меню, благо Android Studio достаточна дружелюбна к нам в этом плане:

 

  • Удалите все элементы, которые видите в “component tree”, кликая по ним и нажимая на клавиатуре клавишу “Delete”. Но не удаляйте компонент “Constraint layout” – так как он является основой для размещения других компонентов.
  • Перенесите элемент “TextView” куда-нибудь посередине сверху на виртуальный смартфон. В свойствах этого элемента найдите “text” и справа от этого свойства в поле впишите My first game”. И увеличим размер текста данного элемента свойство “textSize” (поставим 30 sp).
  • Так же перенесите элемент “ImageView” чуть ниже нашего “TextView”. Выберите из списка, который будет вам предложен “ic_launcher”. Увеличьте его по вашему желанию.
  • Теперь поочередно перетащите три элемента “Button” – каждый друг под другом. Это будут наши кнопки: “Play”, “HighScore”, “Quit”.
  • На верхней кнопке в свойствах поменяйте текст на “Play”. На средней — “HighScore” и на нижней – “Quit”.
  • Очень важно! Все эти элементы мы примерно раскидали по виртуальному экрану устройства, но если вы сейчас запустите приложение на реальном девайсе, то все они разом будут отображены в верхнем левом углу экрана. Чтобы этого избежать необходимо «привязать» каждый элемент к экрану девайса, а после уже размещать его, как вы посчитаете нужным. На скриншоте будет понятно, о чем идет речь:

  • Сохраните проект сочетанием клавиш Ctrl+S или же перейдя в меню File – Save All.

Перед тем как придать жизнь кнопкам, тем самым оживив наше приложение требуется провести небольшой ликбез по структуре Android приложения и то как мы будем писать наш код исходя из соответствующих знаний.

Полагаю, что у вас есть устройство, работающее на ОС Android и вы, наверняка, замечали отличия от других операционных систем. К примеру, у вас открыто приложение – вы просматриваете новости Вконтакте. Тут вам прилетает уведомление о том, что пришло письмо на электронную почту, вы жмёте на это уведомление. Примерно прочитав половину письма, вы получаете уведомление от Twitter (вы его ооочень ждали), прерываете своё чтение и переходите к важному Твиту. Просмотрев твит решаете поиграть в Angry birds – но во время полета очередной птички, вы вспоминаете, что хотели прочесть интересный пост Вконтакте. Вы возвращаетесь туда (вполне возможно на то же место, где и прервались в последний раз). Точно так же вы могли бы вернуться и к чтению письма. Все эти действия обрабатывает ОС Android в зависимости от того, как было спроектировано и разработано то или иное приложение. Разница между ОС Windows и ОС Android в том контексте, который описан чуть выше заключается в том, что ОС Android (учитывая пожелания пользователя) самостоятельно может принять решение о закрытии свернутого приложения или же о его работе в фоновом режиме. Это очень важно учитывать при разработке приложений.

Фазы жизненного цикла приложения – что необходимо об этом знать

ОС Android различает фазы состояния приложения. Отталкиваясь о знании в каком состоянии находится в данный момент приложение операционная система принимает решение о количестве задействованных ресурсов вашего устройства. Принимая это во внимание нужно с толком задумываться о проектировании нашей игры, например, что будет если кто-то примет звонок во время постановки нового рекорда – будет ли утерян прогресс? Ниже представлена схема взаимодействия жизненных циклов:

Вернемся к нашему примеру. Пользователь нажимает иконку «Вконтакте» — приложение входит в фазу onCreate (создание) – далее в фазу onStart (начало) – и сразу же в onResume (возобновление, это может показаться немного странным на данный момент, но попозже всё прояснится). После наступает та фаза, в которой приложение забирает нужное ему количество ресурсов памяти и мощности, и мы активно им пользуемся. Но тут нам приходит уведомление об электронном письме, и мы открываем почту. В этот момент «Вконтакте» перейдет в фазу onPause, а почта перейдет в фазу onCreate – onStart – onResume. Затем вы захотите вернуться «Вконтакт» — приложение перейдет из фазы onPause в onResume.

Отметим тот момент, что ОС Android может решить остановить (onStop) или уничтожить (onDestroy) наше приложение и тогда при его повторном открытии ему потребуется перейти в фазу onCreate. Так что долгое отсутствие активности в приложении или же, например, если другому приложение требуется большее количество аппаратных ресурсов вашего устройства может привести к тому, что вы потеряете тот пост «Вконтакте», на котором остановились.

Пока вы еще окончательно не запутались отметим три важных ваще:

  • Вы знаете, что фазы жизненного цикла существуют;
  • Нам нужно будет с ними взаимодействовать;
  • Мы постепенно в этом разберёмся.

Фазы жизненного цикла приложения – что нам нужно делать

Я думаю будет хорошей новостью для вас тот факт, что тот код, который для нас автоматически сгенерировал Android Studio при создании проекта подразумевает взаимодействие с жизненными циклами за нас. Все что нам потребуется сделать в качестве разработчиков – это удостовериться в том, что ОС Android будет знать, что делать с нашим приложением в каждом из его жизненных циклов. Еще более хорошей новостью является то, что все эти фазы обрабатываются по умолчанию (если, конечно, мы не захотим их переопределить).

 

Разделяем нашу игру на “Activity”

Java-код, который мы пишем, будет разделяться на секции – Activity. Activity – это, грубо говоря, разные экраны нашего приложения. По ходу статей мы часто будем создавать activity для домашнего экрана, activity для самого процесса игры и activity для просмотра очков достижения.

Каждая activity будем иметь свой собственный жизненный цикл, который в свою очередь будет разделён на части, соответствующие фазам, о которых мы писали выше. Эти части в языке Java принято называть «Методами». Метод – это очень важное и значительное понятие в программировании на Java.

Однако, на данном этапе нам требуется знать, что благодаря методам мы будем разделять и структурировать наш код и что некоторые методы обеспечивает нам сама ОС Android, так что это облегчает нашу жизнь в плане обработки жизненных циклов нашего приложения.

Ниже представлен список методов, которые нам предоставляет Android API и краткий обзор для чего они нужны:

onCreate – этот метод выполняется, когда activity создаётся. Здесь мы подготавливаем основу нашей игры: графика, звуки и т.д.;

onRestart – выполняется после того, как activity была остановлена с целью возобновить её.

onStart – выполняется, когда activity становится видимой пользователю;

onResume – выполняется, когда activity начинает взаимодействие с пользователем;

onPause – выполняется, когда мы хотим поставить на паузу нашу activity, дабы не потерять данные, остановить анимацию;

onStop – выполняется, когда activity больше не видна пользователю, потому что другая activity была возобновлена и закрыла собой предыдущую;

onDestroy – выполняется либо потому что вы сами закрыли приложение, либо потому что вашему устройству требуется экономия или перенаправление ресурсов.

В следующей статье мы начнём разбирать по строчкам тот код, который сгенерировала для нас Android Studio. А пока можете еще раз пробежаться по схеме жизненного цикла приложения для закрепления материала.