Використання клавіатури, апаратних клавіш та маніпулятора D-pad

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

Щоб реагувати ваші уявлення та активності на натискання клавіш, перевизначте обробники подій onKeyUp і onKeyDown, як показано в лістингу 15.30.

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

public boolean onKeyDown(int _keyCode, KeyEvent _event)

// Обробіть натискання, поверніть true, якщо обробка виконана return false;

public boolean onKeyUp(int _keyCode, KeyEvent _event)

// Обробіть відпуск клавіші, поверніть true, якщо обробка виконана

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

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

Використання інтерфейсу OnKeyListener

Щоб зреагувати на натискання клавіші всередині існуючого Подання з Активності, реалізуйте інтерфейс OnKeyListener та призначте його для об'єкта View, використовуючи метод setOnKeyListener. Замість того, щоб реалізовувати окремі методи для подій натискання та відпускання клавіш, OnKeyListener використовує єдину подію onKey.Даний механізм показаний у лістингу 15.31.

Листинг 15.31.Реалізація 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.Відстеження подій, що посилаються трекболом

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.

На завершення ви дізналися, як взаємодіяти з користувачем за допомогою своїх Активностей та Уявлень, відстежуючи та інтерпретуючи події, що надходять із сенсорного екрану, трекболу та апаратних клавіш.

Ви також вивчили:

використання об'єктів WakeLock, щоб не дати пристрою піти в режим очікування;

додавати голосове введення у свої додатки, використовуючи бібліотеки для перетворення тексту на мовлення;

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

анімувати окремі Подання та їх групи за допомогою анімації, що створюється шляхом розрахунку проміжних кадрів;

створювати покрокову анімацію;

застосовувати графічні примітиви, доступні для малювання за допомогою Canvas;

вичавити максимум з об'єкта Paint, використовуючи прозорість, шейдери, фільтри масок, колірні фільтри та контурні ефекти;

малювати на Полотні;

застосовувати апаратне прискорення при малюванні двовимірних сцен.