Android обработка жестов: как добавить жесты в свое приложение и распознать их

Tizen эмулятор Современные телефоны предоставляют программистам поистине удивительные возможность. Судите сами, сегодня дисплей для смартфона - не только средство отображения информации, но и мощный интерфейс для взаимодействия с пользователем. Современные дисплеи могут фиксировать множество прикосновений, распознавать жесты и даже определять силу нажатия (3D Touch). Тем удивительнее, что все это богатство довольно редко используется программистами при разработке новых игр и мобильных приложений. Эта статья поможет исправить это досадное недоразумение. Сегодня речь пойдет о распознавании жестов.

В Android для поддержки жестов используется специальный вид: "GestureOverlayView". Жесты как таковые представляют собой двоичные ресурсы. Их можно создать с помощью Android SDK. В свою activity жесты можно загрузить с помощью метода GestureLib.fromRawResource(). Если система распознает жест, вызывается метод onGesturePerformedListener(). Соответственно у activity должен быть объявлена поддержка интерфейса GestureOverlayView, кроме того, Activity должна зарегистрировать себя в GestureOverlayView с помощью метода addOnGesturePerformedListener().

Распознанные жестов в Android отображаются желтым цветом - а нераспознанные - бледно-желтым. Эту подсветку можно отключить через методы setGestureColor(Color.TRANSPARENT) и setUncertainGestureColor(Color.TRANSPARENT) для GestureOverlayView.

Создать новые жесты можно через Android эмулятор, запустив на нем программу GestureBuilder. Вы можете создать несколько жестов с одинаковыми именами. Это поможет более точно распознавать их. При создании эмулятора добавьте поддержку sdcard, в противном случае вы просто не сможете сохранить жесты. Все жесты сохраняются в файл gestures на эмуляторе. Скачать этот файл с эмулятора можно с помощью adb, выполнив команду:

./adb pull /sdcard/gestures ~/test 

После ее выполнения файл с жестами будет сохранен в папку "res/raw" и их можно будет использовать в GestureOverlayView.

Если Вам не хочется возиться с эмулятором, можете установить на свой телефон программу "Gesture Builder" из Google Play. У нее очень простой интерфейс. В режиме Add вы водите пальцем по дисплею смартфона, рисуя нужный жест. После этого вы вводите его название, и жест сохраняется на карточку. При сохранении жеста отображается путь до файла gesture.txt. После добавления всех необходимых жестов этот файл нужно скопировать в свой проект.

Давайте разработаем небольшое тестовое приложение, реализующее распознавание жестов. Создайте новый проект. Главную Activity назовите "GestureTest". Создадим layout main.xml.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="@string/hello"/>
</LinearLayout> 

Код главной activity приведен ниже. Обратите внимание, мы добавляем GestureOverlayView программно в методе onCreate. Там же мы привязали GesturePerformedListener для обработки жестов. Как видите, в onGesturePerformed мы создаем список predictions, содержащий наши жесты и параметр scope, который отражает степень соответствия введенного жеста жнсту библиотеки. В цикле for мы проходимся по этому списку, и если оказывается, что scope больше единицы, считаем жест распознанным, и через Toast печатаем сообщение на экране.

import java.util.ArrayList;

import android.app.Activity;
import android.gesture.Prediction;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;

public class GestureTest extends Activity implements OnGesturePerformedListener {
  private GestureLibrary gestureLib;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GestureOverlayView gestureOverlayView = new GestureOverlayView(this);
    View inflate = getLayoutInflater().inflate(R.layout.main, null);
    gestureOverlayView.addView(inflate);
    gestureOverlayView.addOnGesturePerformedListener(this);
    gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
    if (!gestureLib.load()) {
      finish();
    }
    setContentView(gestureOverlayView);
  }

  @Override
  public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
    ArrayList<Prediction> predictions = gestureLib.recognize(gesture);
    for (Prediction prediction : predictions) {
      if (prediction.score > 1.0) {
        Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT)
            .show();
      }
    }
  }
} 

Можете запустить приложение и поводить пальцем по дисплею своего смартфона, поиграться с различными жестами.

Оригинал: Lars Vogel Android Gestures - Tutorial.


Наши соцсети

Подписаться Facebook Подписаться Вконтакте Подписаться Twitter Подписаться Google Подписаться Telegram

Популярное

Ссылки

Новости [1] [2] [3]... Android/ iOS/ J2ME[1] [2] [3]) Android / Архив

Рейтинг@Mail.ru Яндекс.Метрика
MobiLab.ru © 2005-2018
При использовании материалов сайта ссылка на www.mobilab.ru обязательна