Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html). Там скачать можно только Android Studio |
Демонстрации распознавания стандартных жестов
10.3 Распознавание только части поддерживаемых жестов
Разработаем приложение, в котором продемонстрируем распознавание только некоторой части поддерживаемых жестов по выбору программиста. Мы рассмотрим распознавание жеста смахивания (fling). Приложение содержит одну активность, одно информационное поле для вывода информации о распознанном жесте. Приложение работает следующим образом: пользователь выполняет один из поддерживаемых сенсорных жестов, в информационном поле отображается информация о распознанном жесте.
- Создадим простое приложение и добавим на форму TextView для вывода информации.
- Настроим логику приложения. В java класс, соответствующий активности внесем следующие дополнения.
Нам понадобится экземпляр класса GestureDetectorCompat поэтому в качестве поля класса активности объявим следующую переменную:
GestureDetectorCompat mDetector;
В методе onCreate() класса активности, создадим экземпляр класса GestureDetectorCompat и присвоим его переменной mDetector:
mDetector=new GestureDetectorCompat(this, new MyGestListener());
в конструкторе аргументом, отвечающим за отслеживание сенсорных событий, служит экземпляр класса MyGestListener() - внутренний класс, который является наследником класса GestureDetector.SimpleOnGestureListener.
Имеет смысл немного рассмотреть класс GestureDetector.SimpleOnGestureListener. Этот класс реализует интерфейсы GestureDetector.OnGestureListener и GestureDetector.OnDoubleTapListener, все методы заявленные в интерфейсах в этом классе имеют пустую реализацию и те, которые должны возвращать значение, возвращают false. Поэтому для распознавания какого-то события или некоторого подмножества событий достаточно написать реализацию соответствующих методов, в классе наследнике.
В листинге 10.2 представлен код приложения, в котором распознается только жест смахивания, т. е. реализован метод onFling(), информация о появившемся и распознанном жесте выдается в информационное поле (TextView). В качестве слушателя используется экземпляр класса MyGestListener(), являющийся наследником класса GestureDetector.SimpleOnGestureListener.
Получить больше информации о распознавании жестов можно по ссылке: http://developer.android.com/training/gestures/index.html
package com.example.lab5_1_gestall; import android.os.Bundle; import android.app.Activity; import android.support.v4.view.GestureDetectorCompat; import android.view.*; import android.widget.*; public class MainActivity extends Activity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { TextView tvOutput; GestureDetectorCompat mDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvOutput = (TextView)findViewById(R.id.textView1); mDetector = new GestureDetectorCompat(this,this); mDetector.setOnDoubleTapListener(this); } public boolean onTouchEvent(MotionEvent event){ this.mDetector.onTouchEvent(event); // Be sure to call the superclass implementation return super.onTouchEvent(event); } @Override public boolean onDown(MotionEvent event) { tvOutput.setText("onDown: " + event.toString()); return false; } @Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { tvOutput.setText("onFling: " + event1.toString()+event2.toString()); return true; } @Override public void onLongPress(MotionEvent event) { tvOutput.setText("onLongPress: " + event.toString()); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { tvOutput.setText("onScroll: " + e1.toString()+e2.toString()); return true; } @Override public void onShowPress(MotionEvent event) { tvOutput.setText("onShowPress: " + event.toString()); } @Override public boolean onSingleTapUp(MotionEvent event) { tvOutput.setText("onSingleTapUp: " + event.toString()); return true; } @Override public boolean onDoubleTap(MotionEvent event) { tvOutput.setText("onDoubleTap: " + event.toString()); return true; } @Override public boolean onDoubleTapEvent(MotionEvent event) { tvOutput.setText("onDoubleTapEvent: " + event.toString()); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent event) { tvOutput.setText("onSingleTapConfirmed: " + event.toString()); return true; } }Листинг 10.1. Распознавание поддерживаемых жестов с помощью реализации интерфейсов
package com.example.lab5_1_gestsubset; import android.os.Bundle; import android.app.Activity; import android.support.v4.view.*; import android.view.*; import android.widget.*; public class SubsetGestActivity extends Activity { private GestureDetectorCompat mDetector; private TextView tvOut; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_subset_gest); mDetector = new GestureDetectorCompat(this, new MyGestListener()); tvOut = (TextView)findViewById(R.id.textView1); } @Override public boolean onTouchEvent(MotionEvent event){ this.mDetector.onTouchEvent(event); return super.onTouchEvent(event); } class MyGestListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { tvOut.setText("onFling: " + event1.toString()+event2.toString()); return true; } } }Листинг 10.2. Распознавание жестов с использованием класса GestureDetector.SimpleOnGestureListener.