为了加强鼠标响应事件,Android提供了GestureDetector手势识别类。通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single Tap Up、Show Press、Long Press、Scroll、Down、Fling),具体包括以下几种:

boolean  onDoubleTap(MotionEvent e) 解释:双击的第二下Touch down时触发 boolean  onDoubleTapEvent(MotionEvent e)

解释:双击的第二下Touch down和up都会触发,可用e.getAction()区分。 boolean  onDown(MotionEvent e)

解释:Touch down时触发 boolean  onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

解释:Touch了滑动一点距离后,up时触发。 void  onLongPress(MotionEvent e)

解释:Touch了不移动一直Touch down时触发 boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)

解释:Touch了滑动时触发。 void  onShowPress(MotionEvent e)

解释:Touch了还没有滑动时触发 (与onDown,onLongPress比较 onDown只要Touch down一定立刻触发。 而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。 所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。

boolean  onSingleTapConfirmed(MotionEvent e) boolean  onSingleTapUp(MotionEvent e)

解释:上面这两个函数都是在touch down后又没有滑动(onScroll),又没有长按(onLongPress),然后Touchup时触发。

点击一下非常快的(不滑动)Touchup: onDown->onSingleTapUp->onSingleTapConfirmed 点击一下稍微慢点的(不滑动)Touchup: onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

使用GestureDetector需要在View中重写onTouchEvent事件,例如:

GestureDetector mGesture = null;

@Override   public boolean onTouch(View v, MotionEvent event)   {

// TODO Auto-generated method stub    return mGesture.onTouchEvent(event);

}

详细的测试例子如下: package com.jiubang.android.gesturetest;

import android.app.Activity;

import android.os.Bundle; import android.util.Log;

import android.view.GestureDetector;

import android.view.MotionEvent;

import android.view.View;

import android.view.GestureDetector.SimpleOnGestureListener;

import android.view.View.OnTouchListener;

import android.widget.Button;

public class GestureActivity extends Activity    implements OnTouchListener {

private Button mButton = null;  GestureDetector mGesture = null;

/** Called when the activity is first created. */

@Override     public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Log.i("TEST", "onCreate");

mButton = (Button)findViewById(R.id.button1);

mButton.setOnTouchListener(this);

mGesture = new GestureDetector(this, new GestureListener());

}

@Override  public boolean onTouch(View v, MotionEvent event)  {

// TODO Auto-generated method stub   return mGesture.onTouchEvent(event);

}    class GestureListener extends SimpleOnGestureListener  {

@Override   public boolean onDoubleTap(MotionEvent e)   {

// TODO Auto-generated method stub    Log.i("TEST", "onDoubleTap");    return super.onDoubleTap(e);   }

@Override   public boolean onDown(MotionEvent e)   {

// TODO Auto-generated method stub    Log.i("TEST", "onDown");    return super.onDown(e);

}

@Override   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,     float velocityY)   {

// TODO Auto-generated method stub    Log.i("TEST", "onFling:velocityX = " + velocityX + " velocityY" + velocityY);    return super.onFling(e1, e2, velocityX, velocityY);

}

@Override   public void onLongPress(MotionEvent e)   {

// TODO Auto-generated method stub    Log.i("TEST", "onLongPress");    super.onLongPress(e);   }

@Override   public boolean onScroll(MotionEvent e1, MotionEvent e2,     float distanceX, float distanceY)   {

// TODO Auto-generated method stub    Log.i("TEST", "onScroll:distanceX = " + distanceX + " distanceY = " + distanceY);    return super.onScroll(e1, e2, distanceX, distanceY);

}

@Override   public boolean onSingleTapUp(MotionEvent e)   {

// TODO Auto-generated method stub    Log.i("TEST", "onSingleTapUp");    return super.onSingleTapUp(e);

}

}

}

GestureDetector.OnGestureListener的更多相关文章

  1. 关于GestureDetector.OnGestureListener的onScroll参数distance问题

    关于GestureDetector.OnGestureListener类的onScroll方法参数distanceX和distanceY问题 看到有文章上说onScroll方法中distanceX和d ...

  2. android学习——GestureDetector.OnGestureListener 详解

    Android Touch Screen 与传统Click Touch Screen不同,会有一些手势(Gesture),例如Fling,Scroll等等.这些Gesture会使用户体验大大提升.An ...

  3. 手势GestureDetector.OnGestureListener事件的调起

    @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionE ...

  4. 说说GestureDetector.OnGestureListener onScroll函数

    public abstract boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) ...

  5. android GestureDetector 手势基础

    1. 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vi ...

  6. Android 手势识别类 ( 一 ) GestureDetector 基本介绍

    为了加强鼠标响应事件,Android提供了GestureDetector手势识别类.通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single Ta ...

  7. 【Andorid------手势识别】GestureDetector和SimpleOnGestureListener的使用教程(转)——

    FROM:http://www.cnblogs.com/transmuse/archive/2010/12/02/1894833.html 1. 当用户触摸屏幕的时候,会产生许多手势,例如down,u ...

  8. Android GestureDetector方法详解

    为了加强点击.拖动响应事件,Android提供了GestureDetector手势识别类.通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single ...

  9. OnTouchListener事件监听实现方式之GestureDetector

    当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等. 一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouc ...

随机推荐

  1. 【练习】手工生成awr报告

    ①首先进入$ORACLE_HOME/rdbms/admin目录 [oracle@host02 ~]$ cd $ORACLE_HOME/rdbms/admin 该目录下 [oracle@host02 a ...

  2. Select的深入应用(1)

    在子句中使用列的位置: 使用select语句创建新表: 在子句中使用列的别名: 注意,你的 ANSI SQL 不允许你在一个WHERE子句中引用一个别名.这是因为在WHERE代码被执行时,列值还可能没 ...

  3. JS实现联想输入(一)

    这里是我们的项目中的一个使用JS实现联想输入的功能代码,在此做个小的记录并且将它分享给大家希望对园中的朋友有用! 我将分享三段都非常简单的代码,仅仅作为个人的一点小小的积累而已! 1:后台的Actio ...

  4. 华为OJ平台——字符串分隔

    题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...

  5. php 调用.net的webservice 需要注意的

    首先 SoapClient类这个类用来使用Web services.SoapClient类可以作为给定Web services的客户端.它有两种操作形式:* WSDL 模式* Non-WSDL 模式在 ...

  6. 在ASPxGridView的主从表显示中,有什么属性可以只让其每次选择只展开一列?

    在ASPxGridView的主从表显示中,有什么属性可以只让其每次选择只展开一列?(效果图如下:): 在ASPxGridView的主从表显示中,有什么属性可以只让其每次选择只展开一列(效果图) 实现该 ...

  7. ubuntu13.10无有线网卡驱动

    装上双系统win8+ubuntu13.10后,设置网络后,发现连不上网,重启电脑N次(N > 3),重新设置网络也不行 网上搜索设置网络的方式,都是那样设置的啊(本来以前装过N(N>5)次 ...

  8. C++断言与静态断言

    断言是很早之前就有的东西了,只需要引入cassert头文件即可使用.往往assert被用于检查不可能发生的行为,来确保开发者在调试阶段尽早发现“不可能”事件真的发生了,如果真的发生了,那么就表示代码的 ...

  9. CLRS:median and order statistics

    //maximum and minimum     暴力遍历 O(n) //i-th element dicide and conquer random_selected_partition     ...

  10. css兼容

    1.不同浏览器默认边距不同,必须对body自定义:margin:0;padding:0; 2.margin.padding属性值为%时,不是所有浏览器都支持: 3.transparent属性,IE7之 ...