10.2 Распознавание всех поддерживаемых жестов
Разработаем приложение, в котором продемонстрируем распознавание всех поддерживаемых жестов. Приложение содержит одну активность, одно информационное поле для вывода информации о распознанном жесте. Приложение работает следующим образом: пользователь выполняет один из поддерживаемых сенсорных жестов, в информационном поле отображается информация о распознанном жесте.
Создадим простое приложение и добавим на форму TextView для вывода информации.
Настроим логику приложения. В java класс, соответствующий активности внесем следующие дополнения.
Класс активности должен реализовывать интерфейсы: GestureDetector.OnGestureListener и GestureDetector.OnDoubleTapListener, для этого в объявление класса добавим конструкцию:
implements GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener
Нам понадобится экземпляр класса GestureDetectorCompat поэтому в качестве поля класса активности объявим следующую переменную:
GestureDetectorCompat mDetector;
В методе 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).
В качестве практики предлагается воспроизвести данное приложение и проверить, как система распознает тот или иной жест. Очень полезно для понимания, как выполняются основные жесты.
Достарыңызбен бөлісу: |