GestureDetector手势滑动识别

手势识别是我们日常使用电子物品中非常常见的一个功能,这个功能大大提升了用户体验的感受

手势识别主要有两种方法,一种是GestureDetector,另一种是GestureOverlayView

现在来研究下GestureDetector方法

1.手指触屏的一瞬间,触发MotionEvent事件

2.被OnTouchListener监听,在onTouch()中获得MotionEvent对象

3.GestureDetector转发MotionEvent对象至OnGestureListener

4.OngestureListener获得该对象,根据该对象封装的信息做出合适的反馈

MotionEvent:

  1. 用于封装手势、触摸笔、轨迹球等动作事件

内部封装用于记录横轴和纵轴坐标的属性X和Y

手势的滑动相当于屏幕上的XY轴的坐标的变化

GestureDetector:识别各种手势

当手指:按下、移动、抬起等可通过重载onTouch或者设置setOnTouchListener来监听

原理:当接收到用户触摸消息时,将消息交给GestureDetector加工,通过设置监听器获得GestureDetector处理后的手势

OnGestureListener:手势交互的监听接口,其提供多个抽象方法、根据GestureDetector的手势识别结果调用相对应的方法 ,监听单击事件

OnDoubleTapListener:监听双击事件

OnGestureListener接口的方法太多,没有办法写完,所以只需写一个类,实现所需要的方法即可

单击:onDown、抬起:onSingleTapUp、短按:onShowPress、长按:onLongPress、滚动:onScroll、滑动:onFling

Android提供了一个类SimpleOnGestureListener:我们只需继承这个类,然后重载感兴趣的手势就行

例子代码如下:

package com.gdut.gesturedetector;

import android.app.Activity;

import android.app.ActionBar;

import android.app.Fragment;

import android.os.Bundle;

import android.view.GestureDetector;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.View;

import android.view.GestureDetector.SimpleOnGestureListener;

import android.view.View.OnTouchListener;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.Toast;

import android.os.Build;

public class MainActivity extends Activity {

private ImageView img;

private GestureDetector myGestureDetector;

//OnGestureListener接口的方法太多,没有办法写完,所以只需写一个类,实现所需要的方法即可

//android提供了一个类simpleOnGestureListener

class myGestureListener extends SimpleOnGestureListener{

//实现滑动的onFling方法

@Override

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

float velocityY) {

if(e1.getX() - e2.getX() > 50){

Toast.makeText(MainActivity.this, "从右往左滑动!", Toast.LENGTH_SHORT).show();

}else if(e2.getX() - e1.getX() > 50){

Toast.makeText(MainActivity.this, "从左往右滑动!", Toast.LENGTH_SHORT).show();

}

return super.onFling(e1, e2, velocityX, velocityY);

}

}

@SuppressWarnings("deprecation")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

img = (ImageView) findViewById(R.id.img);

//实例化myGestureDetector,并监听

myGestureDetector = new GestureDetector(new myGestureListener());

//向对这张图片进行监听

img.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

//获得的event要通过GestureDetector转发出去给OnGestureListener,OnGestureListener获得该对象,根据该对象封装的信息作出合适的反馈

myGestureDetector.onTouchEvent(event);

return true;

}

});

}

}

但是GestureDetector,有局限,就是只能进行比较少而简单的手势操作。

而比较复杂或者自定义的手势,就由GestureOverlayView实现

时间: 2024-12-16 16:23:31

GestureDetector手势滑动识别的相关文章

Android 手势滑动的识别

提要: 对于Android中的手势识别可以从以下三个Listener入手--OnTouchListener.OnGestureListener.OnDoubleTapListener.这三个监听器分别是触摸监听.手势滑动监听和屏幕双击操作监听.很多的时候我们需要这些手势识别的操作,例如我们自定义控件的时候就经常会用到.下面就对这三个监听器分别进行介绍. 触摸监听器OnTouchListener 让我们的Activity去现实此接口,并重写onTouch方法.重写OnTouchListener的o

Android的手势操作识别

摘要 首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象. 3. 通过GestureDetector(手势识别器)转发次MotionEvent对象 首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchLi

[android] 手机卫士手势滑动切换屏幕

定义手势识别器 获取手势识别器GestureDetector对象,通过new GestureDetector(context,listener),参数:上下文,监听器 匿名内部类实现简单手势监听器SimpleOnGestureListener接口,重写onFling()滑动方法 传递进来四个参数: MotionEvent e1 ,MotionEvent e2,velocityX,velocityY e1是第一个点,e2是第二个点,x轴的速度,y轴的速度 当第一个点减去第二个点大于200时,我们认

Android的手势操作识别-转

Android的手势操作识别 时间:2012-10-20 23:09 来源:未知 作者:admin 点击: 282 次 摘要 首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象. 3. 通过GestureDetector(手势识别器)转发次MotionEvent对象 首先,在Android系统中,每一次手势交

android GestureDetector 手势基础

1. 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,但是这个方法太过简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦(因为我们要自己根据用户触摸的轨迹去判断是什么手势)Android sdk给我们提供了GestureDetector(Gesture:手势Det

Android GestureDetector手势识别类

为了加强鼠标响应事件,Android提供了GestureDetector手势识别类.通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single Tap Up.Show Press.Long Press.Scroll.Down.Fling),具体包括以下几种: boolean  onDoubleTap(MotionEvent e) 解释:双击的第二下Touch down时触发 boolean  onDoubleTapEvent(MotionEve

手势滑动结束 Activity(一)基本功能的实现

喜欢听音乐的朋友可能都看过天天动听这款 app, 这款 app 有一个亮点就是在切换页面(Fragment)的时候可以通过手势滑动来结束当前页面,这里先说一下,我为什么会这么关心这个功能呢,因为前两天 PM说我们即将开始做的这款app 也要实现页面能通过手势滑动来结束的功能,所以我就拿着这款 app 滑了一上午:但是我要实现的跟天天动听这款 app又有点不同,细心观察的朋友可能会发现,天天动听是 Fragment 之间的切换,而我这里要实现的是 Activity 之间的切换,不过,不管是哪种,最

iOS手势UIGestureRecognizer识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) (转)

1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类.手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别. UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecog

Android开发之手势滑动(滑动手势监听)

在Android应用中,经常需要手势滑动操作,比如上下滑动,或左右方向滑动,处理手势滑动通常有两种方法:一种是单独实现setOnTouchListener监听器来,另一种是构建手势探测器 第一种方法,就是在要实现滑动的View中,实现OnTouchListener监听事件,然后判断KeyDonw和KeyUp 直接的位置距离来判断滑动方向,核心实现代码如下: /** * 设置上下滑动作监听器 * @author caizhiming */ private void setGestureListen