Опубликован: 10.04.2014 | Уровень: для всех | Доступ: платный
Самостоятельная работа 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 представлен возможный код приложения.

Марат Нуриджанян
Марат Нуриджанян
По ссылкам, приведенным в ЛР№1, отсутствуют нужные для работы программмы. Что делать?
Владимир Каункин
Владимир Каункин
В самостоятельной работе 2 [0, 99] вместо [1, 100]
Андрей Суслов
Андрей Суслов
Казахстан
Дмитрий Кузнецов
Дмитрий Кузнецов
Россия, Санкт-Петербург