Android事件传递机制(四)

来源:互联网 发布:java编写helloworld 编辑:程序博客网 时间:2024/06/15 17:50

本章节讲解 MotionEvent

1、事件类型

这里就引入关于 MotionEvent 的一个重要概念,事件类型。事件类型就是指对象所代表的动作。比如说,当你的一个手指在屏幕上滑动一下时,系统会产生一系列的触摸事件对象,他们所代表的动作有所不同。有的事件代表你手指按下这个动作,有的事件代表你手指在屏幕上滑动,还有的事件代表你手指离开屏幕。常用的如下几种:

  • ACTION_DOWN —— 手机刚接触屏幕

  • ACTION_MOVE —— 手指在屏幕上移动

  • ACTION_UP —— 手指从屏幕松开的一瞬间

当然,除了这三个类型外,还有很多不同的事件类型,比如ACTION_CANCEL。它代表当前的手势被取消。想了解更多大家可以自行查阅资料。


2、事件序列

正常情况下,手指触摸屏幕的行为,会触发一系列点击事件,常见的如下几种:

  • 点击屏幕后离开松开,事件序列为 DOWN → UP

  • 点击屏幕滑动一会再松开,事件序列为 DOWN → MOVE → ... → MOVE → UP

3、便于理解体会,直接上代码

Android 触控和滑动那点小事——View的第二篇

重写onTouchEvent方法

手机滑动打印结果

Android 触控和滑动那点小事——View的第二篇

logcat打印测试

大家可以去试着去写代码,自己体会,上面是典型的事件序列,通过MotionEvent对象我们可以得到点击事件发生的x和y坐标。系统为我们提供了getX() / getY()和getRawX() / getRawY()。


getX() / getY()返回的是相对于相对当前View的左上角的x和y坐标,


getRawX() / getRawY()返回的是相对于手机屏幕左上角的x和y坐标。

滑动的最小距离TouchSlop

TouchSlop是系统所能识别出的被认为是滑动的最小距离。这是一个常量,就是说,当你手指在屏幕滑动大于这个常量,系统才会认定你滑动屏幕了,它和设备有关,不同的设备这个值可能是不同的。

我们可以通过如下代码获取这个常量:

ViewConfiguration.get(this).getScaledTouchSlop();
原创粉丝点击