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

Принципы работы c жестами вводимыми пользователями

11.3 Использование созданных жестов в приложении

Для распознавания жестов необходимо добавить элемент GestureOverlayView в XML файл активности. И этот файл может выглядеть, например, как показано на рис. 11.4:

XML файл активности приложения,  элемент  GestureOverlayView обычный компонент интерфейса пользователя

увеличить изображение
Рис. 11.4. XML файл активности приложения, элемент GestureOverlayView обычный компонент интерфейса пользователя

Можно добавить элемент GestureOverlayView поверх всех компонентов, как прозрачный слой, в этом случае XML файл активности может выглядеть так, как показано на рис. 11.5.

XML файл активности приложения, элемент  GestureOverlayView поверх всех компонентов интерфейса пользователя

увеличить изображение
Рис. 11.5. XML файл активности приложения, элемент GestureOverlayView поверх всех компонентов интерфейса пользователя

Далее необходимо обработать ввод жеста пользователя, сравнить с загруженными жестами, и либо определить жест, либо сообщить пользователю, что такого жеста нет. Теперь вся работа будет выполняться в java файле, описывающем главную (и единственную) активность приложения. Внесем в этот класс следующие дополнения:

  • Класс активности должен реализовывать интерфейс OnGesturePerformedListener, для этого в объявление класса добавим конструкцию:
    implements OnGesturePerformedListener;
          
  • Нам понадобятся экземпляры классов GestureLibrary и GestureOverlayView, поэтому в качестве полей класса активности объявим следующие переменные:
    GestureLibrary gLib;
    GestureOverlayView gestures;
          
  • В методе onCreate() выполним следующие действия:
    gLib = GestureLibraries.fromRawResource(this, R.raw.gestures); 
    if (!gLib.load()) {
    finish();
    }
          
    В первой строке выполнена инициализация переменной gLib жестами, загруженными из файла gestures папки res/raw/.

    Оператор if выполняет проверку загружены ли жесты, если нет, выполняется выход из приложения.

  • Добавим в метод onCreate() еще две строчки:
    gestures = (GestureOverlayView)  findViewById(R.id.gestureOverlayView1);
    gestures.addOnGesturePerformedListener(this);
          

    Для инициализации переменной gesture и подключения к ней слушателя событий появления жеста.

  • И наконец напишем реализацию метода OnGesturePerformed(), который и будет вызываться при появлении события, соответствующего какому-либо жесту.
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
        //Создаёт ArrayList c загруженными из gestures жестами
            ArrayList<Prediction> predictions = gLib.recognize(gesture);
            if (predictions.size() > 0) {
              //если загружен хотябы один жест из gestures
                Prediction prediction = predictions.get(0);
                if (prediction.score > 1.0) {
                    if (prediction.name.equals("one"))
                    tvOut.setText("1");
                    else if (prediction.name.equals("stop"))
                      tvOut.setText("stop");
                    else if (prediction.name.equals("two"))
                      tvOut.setText("2");
                }else{
                  tvOut.setText("Жест неизвестен");
                }
            }
        }
          

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

Марат Нуриджанян
Марат Нуриджанян

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

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

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

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