Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html). Там скачать можно только Android Studio |
Демонстрации распознавания стандартных жестов
Цель лабораторной работы:
разработать простейшие приложения для демонстрации распознавания стандартных жестов.
Задачи лабораторной работы:
- рассмотреть распознавание всех поддерживаемых жестов;
- рассмотреть распознавание только части поддерживаемых жестов.
10.1 Введение
Для работы со стандартными жестами Android предоставляет класс GestureDetector. Этот класс содержит два вложенных интерфейса-слушателя: OnGestureListener и OnDoubleTapListener, эти интерфейсы задают методы, отслеживающие стандартные жесты. А также GestureDetector содержит вложенный класс SimpleOnGestureListener, который содержит пустые реализации, возвращающие значение false, где это необходимо, всех методов интерфейсов: OnGestureListener и OnDoubleTapListener.
В лабораторной работе рассмотрим две возможности распознавания жестов:
- случай распознавания всех поддерживаемых жестов, для этого реализуем в классе активности оба интерфейса;
- случай распознавания только некоторого набора поддерживаемых жестов, для этого в классе активности объявим внутренний класс-наследник класса GestureDetector.SimpleOnGestureListener.
10.2 Распознавание всех поддерживаемых жестов
Разработаем приложение, в котором продемонстрируем распознавание всех поддерживаемых жестов. Приложение содержит одну активность, одно информационное поле для вывода информации о распознанном жесте. Приложение работает следующим образом: пользователь выполняет один из поддерживаемых сенсорных жестов, в информационном поле отображается информация о распознанном жесте.
- Создадим простое приложение и добавим на форму TextView для вывода информации.
- Настроим логику приложения. В java класс, соответствующий активности внесем следующие дополнения.
- Класс активности должен реализовывать интерфейсы: GestureDetector.OnGestureListener и GestureDetector.OnDoubleTapListener, для этого в объявление класса добавим конструкцию:
implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener
- Нам понадобится экземпляр класса GestureDetectorCompat поэтому в качестве поля класса активности объявим следующую переменную:
GestureDetectorCompat mDetector;
- Класс активности должен реализовывать интерфейсы: GestureDetector.OnGestureListener и GestureDetector.OnDoubleTapListener, для этого в объявление класса добавим конструкцию:
В методе onCreate() класса активности, создадим экземпляр класса GestureDetectorCompat и присвоим его переменной mDetector:
mDetector = new GestureDetectorCompat(this,this);
одним из параметров конструктора является класс, который реализует интерфейс GestureDetector.OnGestureListener, в нашем случае использовано слово this, т. е. параметром является сам класс активности. Этот интерфейс уведомляет пользователей когда появляется определенное сенсорное событие.
В методе OnCreate() класса активности, следующая строка:
mDetector.setOnDoubleTapListener(this);
устанавливает слушатель событий, связанных с двойным касанием, это должен быть класс, реализующий интерфейс GestureDetector.OnDoubleTapListener. В нашем случае использовано слово this, т.е. слушателем будет опять сам класс активности.
- Чтобы позволить вашему объекту GestureDetector получать события, необходимо переопределить метод onTouchEvent() для активности или элемента GUI. И передавать в экземпляр детектора все обнаруженные события.
public boolean onTouchEvent(MotionEvent event){ this.mDetector.onTouchEvent(event); // Be sure to call the superclass implementation return super.onTouchEvent(event); }
- После проведенной подготовки пришло время реализовать все методы, объявленные в интерфейсах, отвечающих за прослушивание сенсорных событий.
Методы интерфейса GestureDetector.OnGestureListener:
onDown() | - отслеживает появление касания, т. е. палец прижат к экрану; |
onFling() | - отслеживает появление жеста смахивания; |
onLongPress() | - отслеживает удерживание пальца прижатым к экрану длительное время; |
onScroll() | - отслеживает появление жеста прокрутки (пролистывания); |
onShowPress() | - отслеживает, что произошло событие касания и больше никаких событий не происходит короткое время; |
onSingleTapUp() | - отслеживает появление жеста одиночного нажатия (клик). |
Методы интерфейса GestureDetector.OnDoubleTapListener:
onDoubleTap() | - отслеживает появление жеста двойного нажатия ("двойной клик"); |
onDoubleTapEvent() | - отслеживает появление события во время выполнения жеста двойного нажатия, включая касание, перемещение, подъем пальца. |
onSingleTapConfirmed() | - отслеживает появление жеста одиночного нажатия (клик). |
В листинге 10.1 представлен код приложения, в котором распознаются все поддерживаемые жесты, информация о появившемся и распознанном жесте выдается в информационное поле (TextView).
В качестве практики предлагается воспроизвести данное приложение и проверить, как система распознает тот или иной жест. Очень полезно для понимания, как выполняются основные жесты.