手势识别

原理:Android手势识别其实和我们平常对触摸事件的处理是一样的,都是对MotionEvent事件进行计算处理。

Android为我们提供了两个基本的手势识别。

  1. GestureDetector:单手势识别,可以识别按下,单击,双击,长按,滑动,fling滑动。
  2. ScaleGestureDetector:缩放手势识别,

1. GestureDetector单手势识别

GestureDetector中有两个重要接口,

  1. OnGestureListener,识别单次点击,滑动,fling滑动的接口。
  2. OnDoubleTapListener: 识别双击回调的接口。

Android为了我们使用方便,给我们提供了SimpleOnGestureListener类,该类包含了上述两个接口,我们可以根据需要选择性实现方法。

eg:

GestureDetector gestureDetector = new GestureDetector(requireActivity(), new                    GestureDetector.SimpleOnGestureListener() {//按下时触发public boolean onDown(MotionEvent e) { return true;}//按下onDown很短时间没有离开触发,单纯快速点击不会触发,一般不使用该方法。public void onShowPress(MotionEvent e) { }//触摸抬起时触发,如果只是单纯的单击很快执行顺序为onDown-->onSingleTapUp,长按不会触发该事件public boolean onSingleTapUp(MotionEvent e) { return false;}//滑动触发public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false;}//快速滑动后的Fling滑动, velocityX表示x方向速度public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return false;}//长按触发,长按的触发顺序为onDown-->onShowPress->onLongPresspublic void onLongPress(MotionEvent e) { }//单击确认触发,发生在onSingleTapUp之后,抬起后才能确认是否是单击public boolean onSingleTapConfirmed(MotionEvent e) { return false;}//双击确认触发,public boolean onDoubleTap(MotionEvent e) { return false;}//双击过程中发生的事件,一般不用public boolean onDoubleTapEvent(MotionEvent e) { return false;}});

上面为单手势实例化,使用时直接将触摸事件传递进GestureDetector即可,

gestureDetector.onTouchEvent(e);

单手势识别源码

2. ScaleGestureDetector缩放

缩放手势识别使用方式和GestureDetector一样,而且回调接口比较简单

ScaleGestureDetector gestureDetector = new ScaleGestureDetector(requireActivity(), new         ScaleGestureDetector.SimpleOnScaleGestureListener() {@Override   //开始缩放public boolean onScaleBegin(ScaleGestureDetector detector) {return super.onScaleBegin(detector);}@Override   //缩放回调public boolean onScale(ScaleGestureDetector detector) {return super.onScale(detector);}@Override   //结束缩放public void onScaleEnd(ScaleGestureDetector detector) {super.onScaleEnd(detector);}});

缩放源码

3. 自定义手势识别

Android的手势识别都是对触摸的计算,可以根据自己需要的逻辑来自己定义识别,可以研究试下GestureDetector与ScaleGestureDetector源码,

这里的源码是别人写的,我这里只做引用使用。

自定义手势识别源码

4. 其他触摸计算辅助类 VelocityTracker

VelocityTracker是用来计算滑动速度的,通常用户快速滑动后我们会根据用户的滑动速度来再加一段自动滑动(Fling滑动)。使用方式也简单。各个手势识别中一般也都用到它。

  1. 初始化。

    VelocityTracker tracker = VelocityTracker.obtain();
    
  2. 将触摸事件添加到计算数据中。多次添加,一般每个触摸事件都添加进入

    tracker.addMovement(motionEvent);
    
  3. 获得滑动速度之前,先计算,计算之前添加的数据才有速度结果

    //1000 计算结果速度的时间,这里是1000ms多少像素, 5f表示想要得到的速度的最大值。
    tracker.computeCurrentVelocity(1000, 5f)
    
  4. 获取滑动速度

    tracker.getXVelocity();
    tracker.getYVelocity()
    
  5. 清除VelocityTracker中原有的数据

    tracker.clear(); //相当于初始化之后的状态
    
  6. 用完记得最后回收

    tracker.recycler();
    

VelocityTracker使用源码

Android 手势识别相关推荐

  1. android 手势识别 (缩放 单指滑动 多指滑动)

    Android P 手势识别 1.前提介绍: 2.单指相关 2.双指缩放 3.多指滑动. 4.总体识别代码 1.前提介绍: 关于Android 手势识别就是当前view 根据用户的不同touch行为, ...

  2. android手势识别国内外研究现状,基于Android平台的视觉手势识别研究

    摘要: 本文研究基于Android平台的视觉手势检测.手势分割和识别技术,实现了在Android平台上对规定的六种静态手势的识别,为Android平台的人机交互应用提供了新的技术手段. 首先,本文采用 ...

  3. android第三方手势,Android手势识别02——旋转、移动等使用第三方库

    Android手势识别02--旋转.移动等使用第三方库 一.简要说明 通过前面一篇文章(Android手势识别01--基本手势的处理)的学习,我们知道了基本手势的使用方法.但是我们发现这里基本上手势的 ...

  4. Android 手势识别GestureDetector

    接口1:OnGestureListener 检测用户在屏幕的以下操作:按下瞬间.按压.长按.轻击.快速滑屏.拖动 接口2:OnDoubleTapListener 检测用户单击.双击屏幕 使用类:Sim ...

  5. android手势识别

    一.简单手势识别: 简单手势识别分为以下几个步骤: 1.手指触碰屏幕时,触发MotionEvent事件:2.该事件被OnTouchListener监听,可在它的onTouch()方法中获得该Motio ...

  6. android手势滑动页面,Android 手势识别 (左右滑动)实现 页面 切换

    要实现 页面左右滑动的效果  就一定要由手势识别器, 就是这个对象 GestureDetector. 用法其实很简单,这里 写一下 方便以后用到的时候好找. 步骤就是 这样子 123.. 1. 初始化 ...

  7. android 手势识别,Android实现Gesture手势识别用法分析

    本文实例分析了Android实现Gesture手势识别用法.分享给大家供大家参考.具体如下: 很高兴能在Android1.6的sdk看到手势识别这一功能,之前一直在想,如何在android中实现nds ...

  8. Android手势识别——上下左右滑动、屏幕上下左右中区域处理

    手势识别GestureDetector 关于手势识别是Android为了方便开发人员处理屏幕上的触摸.拖动.单双击.滑动等提供的一组接口.用这个我们可以很方便的在屏幕上做出想要的效果,比如滑动翻页.触 ...

  9. android 手势识别代码

    手势创建主要用到GestureOverlayView和GestureLibrary.GestureOverlayView的父类,GestureLibrary类主要对手势进行保存.删除等操作的,存放手势 ...

最新文章

  1. JS 异常: Uncaught RangeError: Maximum call stack size exceeded
  2. c#事件,委托机制(转)
  3. SQL语言基础:数据库语言概念介绍
  4. 云计算-从基础到应用架“.NET研究”构系列-云计算的演进
  5. Linux双系统容易崩溃吗,一个蛋疼的双系统问题(崩溃)
  6. MySQL高可用性分析
  7. gcc和g++的区别 (很详细的描述)
  8. Crossin先生的微信打飞机游戏(4)
  9. 3D打印的来临,传统打印机就要玩完了?
  10. JavaScript进阶教程(6)—硬核动图让你轻松弄懂递归与深浅拷贝
  11. python datetime日期时间去掉 时分秒
  12. python机器学习快速入门
  13. vba更改计算机系统时间,如何设置系统日期,一行VBA编程代码教你学会
  14. 蔡丹红老师刁酒集团《基层管理人员综合能力提升培训班》企业内训开讲
  15. 只有在细细品读她的作品的时候,我才找到久违的宁静
  16. 全栈嵌入式工程师技能图
  17. 黑马全套Java教程(八):集合进阶
  18. 提升金融写作效率:金融校对软件的优势与应用
  19. [Excel函数] 计算统计类函数
  20. python做的RPG小游戏(面向对象思想)

热门文章

  1. halcon histo_to_thresh 高斯门槛值分布
  2. 考托业有什么用途【zhasite】
  3. 前端学习(396):京东制作页面5三大标签优化
  4. 问题 I: 迷宫寻宝
  5. PostgreSQL ODBC数据源设定 Windows 10 环境
  6. 嘿嘿嘿,微软创新秀倒计时2天咯
  7. kdevelop用法
  8. STL常用容器——deque容器的使用
  9. 科大奥瑞物理实验——干涉法测微小量
  10. 地下城手游显示服务器爆满,DNF手游服务器满了怎么办_服务器满了解决办法_求知软件网...