Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 6824 / 1221 | Длительность: 14:18:00
Специальности: Программист
Самостоятельная работа 5:

Демонстрации распознавания стандартных жестов

< Лекция 5 || Самостоятельная работа 5: 12 || Самостоятельная работа 6 >
Аннотация: Разработать простейшие приложения для демонстрации распознавания стандартных жестов.

Цель лабораторной работы:

разработать простейшие приложения для демонстрации распознавания стандартных жестов.

Задачи лабораторной работы:

  • рассмотреть распознавание всех поддерживаемых жестов;
  • рассмотреть распознавание только части поддерживаемых жестов.

10.1 Введение

Для работы со стандартными жестами Android предоставляет класс GestureDetector. Этот класс содержит два вложенных интерфейса-слушателя: OnGestureListener и OnDoubleTapListener, эти интерфейсы задают методы, отслеживающие стандартные жесты. А также GestureDetector содержит вложенный класс SimpleOnGestureListener, который содержит пустые реализации, возвращающие значение false, где это необходимо, всех методов интерфейсов: OnGestureListener и OnDoubleTapListener.

В лабораторной работе рассмотрим две возможности распознавания жестов:

  • случай распознавания всех поддерживаемых жестов, для этого реализуем в классе активности оба интерфейса;
  • случай распознавания только некоторого набора поддерживаемых жестов, для этого в классе активности объявим внутренний класс-наследник класса GestureDetector.SimpleOnGestureListener.

10.2 Распознавание всех поддерживаемых жестов

Разработаем приложение, в котором продемонстрируем распознавание всех поддерживаемых жестов. Приложение содержит одну активность, одно информационное поле для вывода информации о распознанном жесте. Приложение работает следующим образом: пользователь выполняет один из поддерживаемых сенсорных жестов, в информационном поле отображается информация о распознанном жесте.

  1. Создадим простое приложение и добавим на форму TextView для вывода информации.
  2. Настроим логику приложения. В 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, т.е. слушателем будет опять сам класс активности.

  1. Чтобы позволить вашему объекту GestureDetector получать события, необходимо переопределить метод onTouchEvent() для активности или элемента GUI. И передавать в экземпляр детектора все обнаруженные события.
    public boolean onTouchEvent(MotionEvent event){ 
        this.mDetector.onTouchEvent(event);
        // Be sure to call the superclass implementation
        return super.onTouchEvent(event);
    }
          
  2. После проведенной подготовки пришло время реализовать все методы, объявленные в интерфейсах, отвечающих за прослушивание сенсорных событий.

Методы интерфейса GestureDetector.OnGestureListener:

onDown() - отслеживает появление касания, т. е. палец прижат к экрану;
onFling() - отслеживает появление жеста смахивания;
onLongPress() - отслеживает удерживание пальца прижатым к экрану длительное время;
onScroll() - отслеживает появление жеста прокрутки (пролистывания);
onShowPress() - отслеживает, что произошло событие касания и больше никаких событий не происходит короткое время;
onSingleTapUp() - отслеживает появление жеста одиночного нажатия (клик).

Методы интерфейса GestureDetector.OnDoubleTapListener:

onDoubleTap() - отслеживает появление жеста двойного нажатия ("двойной клик");
onDoubleTapEvent() - отслеживает появление события во время выполнения жеста двойного нажатия, включая касание, перемещение, подъем пальца.
onSingleTapConfirmed() - отслеживает появление жеста одиночного нажатия (клик).

В листинге 10.1 представлен код приложения, в котором распознаются все поддерживаемые жесты, информация о появившемся и распознанном жесте выдается в информационное поле (TextView).

В качестве практики предлагается воспроизвести данное приложение и проверить, как система распознает тот или иной жест. Очень полезно для понимания, как выполняются основные жесты.

< Лекция 5 || Самостоятельная работа 5: 12 || Самостоятельная работа 6 >
Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.