为了加强鼠标响应事件,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事件,例如:

  1. GestureDetector mGesture = null;
  2. @Override
  3. public boolean onTouch(View v, MotionEvent event)
  4. {
  5. // TODO Auto-generated method stub
  6. return mGesture.onTouchEvent(event);
  7. }

详细的测试例子如下:

  1. package com.jiubang.android.gesturetest;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.util.Log;
  5. import android.view.GestureDetector;
  6. import android.view.MotionEvent;
  7. import android.view.View;
  8. import android.view.GestureDetector.SimpleOnGestureListener;
  9. import android.view.View.OnTouchListener;
  10. import android.widget.Button;
  11. public class GestureActivity extends Activity
  12. implements OnTouchListener
  13. {
  14. private Button mButton = null;
  15. GestureDetector mGesture = null;
  16. /** Called when the activity is first created. */
  17. @Override
  18. public void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. Log.i("TEST", "onCreate");
  22. mButton = (Button)findViewById(R.id.button1);
  23. mButton.setOnTouchListener(this);
  24. mGesture = new GestureDetector(this, new GestureListener());
  25. }
  26. @Override
  27. public boolean onTouch(View v, MotionEvent event)
  28. {
  29. // TODO Auto-generated method stub
  30. return mGesture.onTouchEvent(event);
  31. }
  32. class GestureListener extends SimpleOnGestureListener
  33. {
  34. @Override
  35. public boolean onDoubleTap(MotionEvent e)
  36. {
  37. // TODO Auto-generated method stub
  38. Log.i("TEST", "onDoubleTap");
  39. return super.onDoubleTap(e);
  40. }
  41. @Override
  42. public boolean onDown(MotionEvent e)
  43. {
  44. // TODO Auto-generated method stub
  45. Log.i("TEST", "onDown");
  46. return super.onDown(e);
  47. }
  48. @Override
  49. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  50. float velocityY)
  51. {
  52. // TODO Auto-generated method stub
  53. Log.i("TEST", "onFling:velocityX = " + velocityX + " velocityY" + velocityY);
  54. return super.onFling(e1, e2, velocityX, velocityY);
  55. }
  56. @Override
  57. public void onLongPress(MotionEvent e)
  58. {
  59. // TODO Auto-generated method stub
  60. Log.i("TEST", "onLongPress");
  61. super.onLongPress(e);
  62. }
  63. @Override
  64. public boolean onScroll(MotionEvent e1, MotionEvent e2,
  65. float distanceX, float distanceY)
  66. {
  67. // TODO Auto-generated method stub
  68. Log.i("TEST", "onScroll:distanceX = " + distanceX + " distanceY = " + distanceY);
  69. return super.onScroll(e1, e2, distanceX, distanceY);
  70. }
  71. @Override
  72. public boolean onSingleTapUp(MotionEvent e)
  73. {
  74. // TODO Auto-generated method stub
  75. Log.i("TEST", "onSingleTapUp");
  76. return super.onSingleTapUp(e);
  77. }
  78. }
  79. }

//以上部分内容选自网络

Android 手势识别类 ( 一 ) GestureDetector 基本介绍的更多相关文章

  1. Android 手势识别类 ( 三 ) GestureDetector 源码浅析

    前言:上 篇介绍了提供手势绘制的视图平台GestureOverlayView,但是在视图平台上绘制出的手势,是需要存储以及在必要的利用时加载取出手势.所 以,用户绘制出的一个完整的手势是需要一定的代码 ...

  2. Android 手势识别类 ( 二 ) GestureDetector 源码浅析

    前言:Android 关于手势的操作提供两种形式:一种是针对用户手指在屏幕上划出的动作而进行移动的检测,这些手势的检测通过android提供的监听器来实现:另一种是用 户手指在屏幕上滑动而形成一定的不 ...

  3. Android图像格式类及图像转换方法

    Android图像格式类及图像转换方法介绍 一款软件的开发和图像密切相关,特别是移动应用程序,在视觉效果等方面是至关重要的,因为这直接关系到用户的体验效果.在Android程序开发的过程中,了解存在哪 ...

  4. android手势识别ViewFlipper触摸动画

    使用ViewFlipper来将您要来回拖动的View装在一起,然 后与GestureDetector手势识别类来联动,确定要显示哪个View,加上一点点动画效果即可.比如当手指向左快速滑动时跳转到上一 ...

  5. Android手势识别的发展

    在播放器.与手势识别.所以,看看今天的我们Android手势识别. 首先,我们需要站在巨人的肩膀上.有些人举了个例子和说明. 第一章: http://www.2cto.com/kf/201110/10 ...

  6. Android manifest之manifest标签详细介绍

    AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...

  7. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...

  8. 项目源码--Android答题类游戏源码

    下载源码 技术要点: 1. 精致的答题UI 2. Android的Http通信技术 3. Android数据库QLITE与其他数据存储技术 4. Android在线音乐背景技术 5. Android答 ...

  9. Android基础_1 四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),BroadcastReceiver(广播接收器). 一.四大基本组件 Acti ...

随机推荐

  1. Windows Azure 上传 VM

    One of the great features of Windows Azure is VHD mobility. Simply put it means you can upload and d ...

  2. android在Data目录内置可删除的APP

    一.准备工作:make_ext4fs.mkuserimg.sh.simg2img,把它们跟要修改的 .img.ext4(或.img)文件放置到同一个目录下 二.转换源文件为img格式( .img则略过 ...

  3. App开发流程之图像处理工具类

    先罗列一下工具类中提供的方法: /** * 根据原始view和毛玻璃样式,获取模糊视图,并自动作为原view的subview(如果不需要作为子视图,自行调用removeFromSuperview) * ...

  4. iOS 正则表达式判断邮箱、身份证..是否正确

    //邮箱 + (BOOL) validateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Z ...

  5. IOS学习资源收集--关于动画的代码学习资源总汇(很棒的动画效果哦)

    目录大纲: 1.很棒的iOS加载动画. github网址:https://github.com/NghiaTranUIT/FeSpinner 游老师的译文blog:http://www.cnblogs ...

  6. js 字符串转 数字

    <html> <body> <script language="javascript"> var a = "0.11"; v ...

  7. 一步步学敏捷开发:6、Scrum的3种工件

    Scrum的3种工件包括:Product Blacklog.Sprint Backlog.完成标准. 1.产品待办事项列表(Product Backlog) 产品Blacklog是Scrum中的核心工 ...

  8. 大家一起和snailren学java-(五)访问控制权限

    “感觉中间断了一天,可是数数好像又没断……(-_^)” 这一天我们来再次细致讨论一下java的访控机制.java的访控机制其实在编程架构上非常实用的,也就是所谓的隐藏具体实现或者封装. 首先看看使用场 ...

  9. [eclipse]改项目名称后tomcat连接问题解决方法

    背景:在我们使用eclipse进行项目开发时,有时候会需要修改项目名称,当改动项目名称后发现tomcat启动访问出现问题,使用新的项目名称不可行,使用旧的项目名称却可以.修改web.xml里面的dis ...

  10. svn conflict

    安装svn apt-get install subversion 当前两个人都更新版本为version1 A修改了monitor.txt文件 提交后版本为version2 B也修改了monitor.t ...