Главная » Разработка для Android » Использование клавиатуры, аппаратных клавиш и манипулятора D-pad

0

Событие, сигнализирующее о нажатии любой аппаратной  кнопки обра- батывается методами onKeyDown и onKeyUp, принадлежащими Активности или выделенному  Представлению. Это касается  клавиатуры, манипулятора D-pad, клавиш для изменения звука, навигации, вызова и отбоя. Единствен- ное исключение — кнопка home, взаимодействие с которой ограничено, чтобы пользователь всегда мог выйти из приложения.

Чтобы ваши Представления и Активности реагировали на нажатия клавиш, переопределите обработчики событий onKeyUp и onKeyDown, как показано в листинге 15.30.

Листинг 15.30. Обработка  нажатий клавиш

@Override

public boolean onKeyDown(int _keyCode, KeyEvent _event) {

// Обработайте нажатие, верните true, если обработка выполнена return false;

}

@Override

public boolean onKeyUp(int _keyCode, KeyEvent _event) {

// Обработайте отпускание клавиши, верните true, если обработка выполнена

return false;

}

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

Параметр KeyEvent также включает в себя несколько методов: isAltPressed, isShiftPressed и isSymPressed, определяющих, были ли нажаты функциональ- ные клавиши, такие как Alt, Shift или Sym. Статический метод isModifierKey принимает  _keyCode и определяет,  является ли нажатая  клавиша  моди- фикатором.

Использование интерфейса OnKeyListener

Чтобы среагировать на нажатие клавиши внутри существующего Пред- ставления из Активности, реализуйте интерфейс OnKeyListener и назначьте его для объекта View, используя метод setOnKeyListener. Вместо того, чтобы реализовывать отдельные методы для событий нажатия и отпускания кла- виш, OnKeyListener использует  единое событие onKey. Данный механизм показан в листинге 15.31.

Листинг 15.31. Реализация OnKeyListener внутри Активности

myView.setOnKeyListener(new OnKeyListener() {

public boolean onKey(View v, int keyCode, KeyEvent event)

{

}

});

// TODO Обработайте нажатие клавиши, верните true, если

// обработка выполнена return false;

Используйте параметр keyCode для получения клавиши, которая была нажата. Параметр KeyEvent нужен для распознавания типа события (нажатие представлено  константой  ACTION_DOWN, а отпускание  — ACTION_UP).

Использование трекбола

Многие мобильные устройства предоставляют трекбол в качестве удоб- ной альтернативы (или  дополнения) сенсорному  экрану  и манипулятору D-pad. События, посылаемые трекболом, обрабатываются путем переопре- деления  метода onTrackballEvent внутри  ваших Представлений или Актив- ностей.

Как и в случае с касаниями,  данные о движении  трекбола  содержатся в параметре MotionEvent. При этом MotionEvent включает относительное

движение трекбола с момента поступления последнего события; значения нормализуются таким  образом, что 1 означает  движение,  эквивалентное нажатию на манипулятор D-pad.

Изменения по вертикали могут быть получены с помощью метода getY, а горизонтальная прокрутка доступна через метод getX, как показано в ли- стинге 15.32.

Листинг 15.32. Отслеживание событий, посылаемых  трекболом

@Override

public boolean onTrackballEvent(MotionEvent _event) {

float vertical = _event.getY();

float horizontal = _event.getX();

// TODO Обработка движений трекбола. return false;

}

Резюме

Эта завершающая глава охватывает некоторые из наиболее сложных возможностей платформы Android.  Вы узнали  больше о механизмах  без- опасности в Android, в частности, рассмотрели систему полномочий, которая использовалась для предоставления доступа к Источникам данных, Сервисам, Активностям, Приемникам широковещательных намерений и к самим Намерениям.

Вы изучили возможности межпроцессного взаимодействия, используя AIDL (Android Interface Definition Language)  для создания  насыщенных интерфейсов между компонентами приложения.

Большинство разделов посвящены  классу Canvas, в частности, рассмо- трены более сложные  возможности,  предоставляемые библиотеками для рисования двумерной графики.  Эта часть главы познакомила с процессом рисования доступных графических примитивов, а также продемонстриро- вала возможности класса Paint.

Вы научились использовать полупрозрачность, создавать градиентные шейдеры, рассмотрели фильтры  для масок, цветовые фильтры, конкурные эффекты. Узнали, как применить аппаратное ускорение для двумерных Представлений, опробовали  некоторые  общепринятые подходы к рисова- нию с помощью Canvas. Познакомились графическим элементом классом SurfaceView,  с помощью которого  можно отображать  графику  на экране прямо из фонового потока. Далее последовало введение в трехмерную гра- фику  с использованием фреймворка OpenGL  ES, а также демонстрация применения SurfaceView  для предварительного просмотра  живых видео- потоков с камеры.

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

Вы также изучили:

как использовать объекты WakeLock,  чтобы не дать устройству  уйти в режим ожидания;

добавлять голосовой ввод в свои приложения, используя библиотеки для преобразования текста в речь;

использовать Глобальную  сеть в качестве  источника  данных  или промежуточного звена для их обработки, чтобы сделать свои прило- жения информационно насыщенными, при этом сохраняя  их легко- весность;

анимировать отдельные  Представления и их группы с помощью ани- мации, создаваемой путем расчета промежуточных кадров;

создавать пошаговую анимацию;

применять графические примитивы, доступные для рисования с по- мощью Canvas;

выжать максимум из объекта Paint, используя прозрачность, шейдеры, фильтры  масок, цветовые фильтры  и контурные  эффекты;

рисовать на Холсте;

применять аппаратное ускорение при рисовании двумерных сцен.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии