Сеилханова Р. Б


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



бет107/112
Дата07.01.2022
өлшемі11,65 Mb.
#17516
түріПрограмма дисциплины
1   ...   104   105   106   107   108   109   110   111   112
Байланысты:
Силлабус Android krmu 20

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


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

  1. Создадим простое приложение и добавим на форму TextView для вывода информации.

  2. Настроим логику приложения. В 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.


Литература:

[4-6]



Достарыңызбен бөлісу:
1   ...   104   105   106   107   108   109   110   111   112




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет