Иллюстрированный самоучитель по программированию мобильных телефонов

Класс Canvas

Высокоуровневые классы, изученные в главе 6, дают возможность создавать пользовательский интерфейс приложения. По сути, эти классы выполнены в виде шаблонов, используя которые вы можете создавать списки, формы, шрифт, группы элементов, бегущие строки. Но использование таких классов-шаблонов несколько упрощает интерфейс программы, лишая возможности использования графики в программах на Java 2 ME.

Иногда в приложении необходимо нарисовать таблицу, линию, квадрат, то есть воспользоваться графикой для создания насыщенной и красочной программы. Для этих целей в платформе Java 2 ME существуют так называемые классы низкоуровневого интерфейса – это классы Canvas и GameCanvas (класс GameCanvas будет рассмотрен в следующей главе), а так же класс Graphics, с помощью которого осуществляется непосредственная прорисовка графики на экране телефона.

В самом начале этой главы дается характеристика классам Canvas и Graphics, попутно рассматриваются имеющиеся в составе обоих классов методы, после чего мы приступим к практической части и создадим ряд примеров, иллюстрирующих работу обоих классов.


Класс Canvas – это абстрактный класс, поэтому необходимо создавать подклассы для работы с классом Canvas. Абстрактный класс Canvas представляет некий обобщенный графический контекст, что позволяет программе производить прорисовку графики при помощи класса Graphics. Кроме этого класс Canvas предоставляет возможность в обработке событий полученных с клавиш телефона.

Если классы высокоуровневого интерфейса, рассмотренные в главах 5 и 6, обрабатывают команды перехода, то с помощью класса Canvas можно получать события с любой нажатой клавиши телефона.

Существует ряд так называемых "ключевых кодов" в виде заданных констант, с помощью которых можно назначать игровые действия для клавиш телефона. Все ключевые коды соответствуют стандарту ITU-T и заданны в виде следующих констант:

  • static int DOWN – движение вниз;
  • static int FIRE – обычно используется в играх и реализует стрельбу из оружия;
  • static int GAME_A – игровая клавиша А;
  • static int GAME_B – игровая клавиша В;
  • static int GAME_C – игровая клавиша С;
  • static int GAME_D – игровая клавиша D;
  • static int KEY_NUMO – клавиша 0;
  • static int KEY_NUM1 – клавиша 1;
  • static int KEY_NUM2 – клавиша 2;
  • static int KEY_NUM3 – клавиша 3;
  • static int KEY_NUM4 – клавиша 4;
  • static int KEY_NUM5 – клавиша 5;
  • static int KEY_NUM6 – клавиша 6;
  • static int KEY_NUM7 – клавиша 7;
  • static int KEY_NUM8 – клавиша 8;
  • static int KEY_NUM9 – клавиша 9;
  • static int KEY_POUND – клавиша #;
  • static int KEY_STAR – клавиша *;
  • static int LEFT – движение влево;
  • static int RIGHT – движение вправо;
  • static int UP – движение вверх.

Ключевые коды GAME_A, GAME_B, GAME_ C, GAME_D и FIRE предназначены специально для игровых действий и обычно задаются клавишам с цифрами соответственно 2, 4, 8, 6 и 5, но зависят от реализации конкретных моделей телефонов.

Методы класса Canvas

Большинство методов класса Canvas обеспечивают обработку низкоуровневых событий. Абстрактный метод void paint (Graphics g) является основным методом, с помощью которого происходит прорисовка графики на экране телефона. Класс Graphics определяет, что именно необходимо рисовать на экране телефона.

Разберем основную часть методов класса Canvas:

  • int getGameAction (int keyCode) – связывает игровые действия с заданным ключевым кодом;
  • int getKeyCode(int gameAction) – получает ключевой код игровых действий;
  • String getKeyName (int keyCode) – получает ключевой код для клавиши;
  • boolean hasPointerMotionEvents () – проверяет поддержку устройством перемещение указателя;
  • protected void keyPressed(int keyCode) – вызывается при нажатии клавиши;
  • protected void keyReleased(int keyCode) – вызывается при отпускании нажатой клавиши;
  • protected void keyRepeated(int keyCode) – повторное нажатие клавиши;
  • protected abstract void paint (Graphics g) – прорисовка графики на экране телефона;
  • protected void pointerDragged(int x, int у) – определяет перемещение курсора;
  • protected void pointerPressed(int x, int у) – определяет позицию курсора, при которой должно производится нажатие определенной клавиши;
  • protected void pointerReleased(int x, int у) – определяет позицию курсора в момент отпускания определенной клавиши;
  • void repaint () – повторяет прорисовку;
  • void repaint(int x, int у, int width, int height) – повторяет прорисовку заданной области.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.