Класс 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) – повторяет прорисовку заданной области.