Слухання подій торкання – програмування Android

&nbsp

Як ви вже, звичайно ж, здогадалися, щоб модифікувати демонстраційне додаток для реагування на дотики до екрану, потрібно просто додати до коду обробник торкань Код із прикладу 78 доповнює додаток так, щоб в DotView, там, де відбувається дотик до екрану, зявлялася блакитна точка Цей код потрібно додати в демонстраційне додаток (див приклад 77) на початку функції onCreate, прямо після виклику до її батьківському методу Зверніть увагу: оскільки код, що відображає координати х і у останній доданій точки, підключений тільки до моделі, він продовжує працювати правильно, незалежно від того, як саме вид додає точку

Приклад 78 Точки від дотиків

Подія MotіonEvent, передане оброблювачу, має кілька інших властивостей, крім інформації про місце того торкання, яке викликало появу цієї точки З прикладу видно, що в ньому також міститься інформація про тип події Таких типів чотири: DOWN, UP, MOVE або CANCEL Звичайне торкання генерує одна подія DOWN і одна подія UP Дотик і перетягування генерує подія DOWN, кілька подій MOVE і, нарешті, подія UP

Можливості обробки жестів, що забезпечуються MotіonEvent, дуже цікаві Подія містить дані про розмір області, якої торкнувся користувач, а також про силу натискання Це означає, що на пристроях, підтримуючих такі функції, додаток зможе відрізняти натискання одним пальцем від натискання двома пальцями, або дуже легкий дотик від сильного клацання

У мобільному програмуванні дуже важлива ефективність коду Фреймворк користувача інтерфейсу при відстеження подій, повязаних з сенсорним екраном, і при повідомленні про них стикається з певною дилемою Якщо повідомляти про занадто малій кількості подій, то, можливо, системі не вдасться простежити рух з достатньою точністю – а, наприклад, при розпізнаванні почерку потрібна висока точність відстежування рухів З іншого боку, повідомляючи про велику кількість актів торкання, оформляючи кожен такий акт як окрема подія, можна обтяжити систему неприйнятно високим навантаженням Під фреймворці користувача інтерфейсу Android ця проблема вирішується шляхом обєднання груп зразків у пакети Так вдається знизити навантаження на систему, зберігаючи при цьому точність її роботи Щоб переглянути всі зразки, асоційовані з подією, використовується функція відстежування історії подій (history facility), що реалізується за допомогою методів getHistorical X, getHistoricalY і т д

У прикладі 79 показано, як користуватися цією функцією Код доповнює демонстраційну програму таким чином, щоб можна було відстежувати жести користувача, який стосується сенсорного екрана Фреймворк передає зразки координат х і у методу onTouch обєкта, встановленого як OnTouchListener для DotView У всіх отриманих координатах цей метод відображає блакитну крапку

Приклад 79 Відстеження рухів

На рис 76 показано, як могла б виглядати доповнена версія додатка після декількох клацань і перетягування

У даній реалізації для визначення діаметру точки, яку слід відобразити, використовуються показники розміру тієї площі, до якої додано тиск, і сили цього тиску На жаль, емулятор Android не імітує площі і сили натискання, тому в ньому всі крапки мають однаковий діаметр Значення площі і сили натискання стандартизовані на різних пристроях і мають вигляд чисел з плаваючою точкою в діапазоні від 0,0 до 1,0 При цьому залежно від калібрування екрану можливі значення, що перевищують 1,0 Емулятор завжди сприймає силу і площа натискання як рівні нулю, тобто мають мінімальне значення

Рис 76 Результат, що досягається після тривалої роботи демонстраційної програми Dots

Цикл обробки подій ACTI0N_M0VE працює з подіями з зафіксованої історії, зібраними в пакети Якщо торкання змінюються швидше, ніж фреймворк може про це повідомляти, то він обєднує їх в єдине подія Метод getHi storySize, що відноситься до MotіonEvent, повертає кількість зразків в пакеті, а різні методи getHistory дають інформацію про специфіку подсобитій

Пристрої з трекболи (кульковими маніпуляторами) також генерують події MotіonEvent при переміщенні трекбола Ці події подібні до тих, що виникають при торканнях сенсорного екрану, але обробка їх відбувається інакше Події трекбола MotionEvent передаються в вид View при виклику методу dispatchTrackbal 1 Event, а не dispatchTouchEvent, застосовуваного для обробки торкань Притому що dispatchTrackbal 1 Event передає подія методу onTrackbal 1 Event, він перед цим не передає дана подія слухачеві Генеруються трекболом події MotionEvent не тільки невидимі для звичайного механізму обробки торкань, більше того – для відгуку на них віджет повинен створити підклас від View і перевизначити метод onTrackbal Event

Характерні особливості обробки подій MotionEvent, що генеруються трекболом, цим не обмежуються Якщо ці події не споживаються (про це процесі – трохи нижче), то перетворюються на події хрестовини Це цілком зрозуміло, адже на більшості пристроїв є або трекбол, або хрестовина, а ось одночасно ці елементи майже не зустрічаються Без такого перетворення було б неможливо генерувати події хрестовини на пристрої, де є тільки трекбол Звичайно, все це має на увазі, що додаток, обробляє події трекбола, має робити це настільки акуратно, щоб не порушити перетворення

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*