有关touchEvent的事件里都有一个 MotionEvent 參数,以下来简介一下它的属性的一些含义和使用的方法

通常单指操作时,一般例如以下:

switch (event.getAction()) {//第一个触摸点
case MotionEvent.ACTION_DOWN: //按下 = 0
float x = event.getX();
break;
case MotionEvent.ACTION_MOVE: //移动 = 2 break;
case MotionEvent.ACTION_UP: // 抬起 = 1 break;
}

多点触摸时:

下面属性在api level 5出现,api level 8过时。

MotionEvent.ACTION_POINTER_1_DOWN

MotionEvent.ACTION_POINTER_2_DOWN

MotionEvent.ACTION_POINTER_3_DOWN

MotionEvent.ACTION_POINTER_1_UP

MotionEvent.ACTION_POINTER_2_UP

MotionEvent.ACTION_POINTER_3_UP

api level 8 即2.2后起用:MotionEvent.ACTION_POINTER_DOWNMotionEvent.ACTION_POINTER_UP

通过下面測试发现。多点触摸时,

switch (event.getAction()) {
// case MotionEvent.ACTION_DOWN: //按下 = 0
// System.out.println("onTouchEvent");
// break;
// case MotionEvent.ACTION_MOVE://移动 = 2
//
// break;
// case MotionEvent.ACTION_UP:// 抬起 = 1
//
// break; case MotionEvent.ACTION_POINTER_DOWN://非第一个触摸点按下 = 5
System.out.println("ACTION_POINTER_DOWN");
break; case MotionEvent.ACTION_POINTER_UP: //非第一个触摸点抬起 = 6
System.out.println("ACTION_POINTER_UP");
break;
default:
break;
}

MotionEvent.ACTION_POINTER_DOWN、MotionEvent.ACTION_POINTER_UP  未运行

当屏幕上已经有一个点被按住,此时再按下其它点时。才会触发MotionEvent.ACTION_POINTER_DOWN

第二个点以后取x、y坐标值

float x2 = event.getX(event.getActionIndex());//action index 从0開始到pointer count -1 结束
float y2 = event.getY(event.getActionIndex());//某个index的触摸点的 相对于当前view的y坐标
event.getPointerCount(); //触摸点的数量

多点时获取坐标 索引 id 演示样例

		int pointerCount = event.getPointerCount();
// switch (event.getAction() & MotionEvent.ACTION_MASK) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_MOVE:
for (int i = 0; i < pointerCount; i++) {
int id = event.getPointerId(i); //同一点的id值保持不变
int index = i;//同一点的索引值,是可变的。当由多指逐渐降低时。index--
dx = (int) event.getX(id);
dy = (int) event.getY(id);
}
invalidate();
break;
case MotionEvent.ACTION_CANCEL: default:
break;
}

演示样例

    @Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
System.out.println("ACTION_DOWN");
mDownX = (int) event.getX();
mDownY = (int) event.getY();
if (flag) {
return true; //对于onTouchEvent,要return true。才干运行兴许的 move。up
} else {
break;
} case MotionEvent.ACTION_MOVE:
System.out.println("move");
int moveX = (int) event.getX();
int moveY = (int) event.getY(); break; case MotionEvent.ACTION_UP:
System.out.println("ACTION_UP");
break; case MotionEvent.ACTION_POINTER_DOWN: //当屏幕上已经有一个点被按住,此时再按下其它点时触发
System.out.println("ACTION_POINTER_DOWN"); break; case MotionEvent.ACTION_POINTER_UP:
System.out.println("ACTION_POINTER_UP"); break; }
return super.onTouchEvent(event);
}

输出:

06-06 23:25:38.974 11930-11930/com.immoc.canvaspath I/System.out: ACTION_DOWN
06-06 23:25:38.974 11930-11930/com.immoc.canvaspath I/System.out: ACTION_POINTER_DOWN
06-06 23:25:39.202 11930-11930/com.immoc.canvaspath I/System.out: move
06-06 23:25:39.218 11930-11930/com.immoc.canvaspath I/System.out: move
06-06 23:25:39.234 11930-11930/com.immoc.canvaspath I/System.out: move
06-06 23:25:39.250 11930-11930/com.immoc.canvaspath I/System.out: move
06-06 23:25:39.334 11930-11930/com.immoc.canvaspath I/System.out: ACTION_POINTER_UP
06-06 23:25:39.334 11930-11930/com.immoc.canvaspath I/System.out: ACTION_UP

Android 简述touch事件中的MotionEvent的更多相关文章

  1. Android的Touch事件分发机制简单探析

    前言 Android中关于触摸事件的分发传递是一个很值得研究的东西.曾不见你引入了一个ListView的滑动功能,ListView就不听你手指的指唤来滚动了:也不知道为啥Button设置了onClic ...

  2. Android对touch事件的拦截,在View Tree上的传递顺序

    当发生touch事件时,系统会产生一个MotionEvent并且沿着View Tree开始传递.首先获取MotionEvent是View Tree的根节点,根节点通常是一个ViewGroup,View ...

  3. touch事件中的touches、targetTouches和changedTouches详解

    touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...

  4. android 管理Touch事件

    The onInterceptTouchEvent() method gives a parent the chance to see any touch event before its child ...

  5. 移动的 touch事件中的touches、targetTouches和changedTouches

    touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...

  6. touch事件中的touches、targetTouches和changedTouches

    touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表; 通过一个例子来区分一下 ...

  7. Android中的Touch事件

    Android中的Touch事件处理 主要内容 Activity或View类的onTouchEvent()回调函数会接收到touch事件. 一个完整的手势是从ACTION_DOWN开始,到ACTION ...

  8. Android Touch事件之一:Touch事件在父ViewGroup和子View之间的传递篇

    2015-11-26 17:00:22 前言:Android的Touch事件传递和View的实现紧密相连,因此理解Touch事件的传递,有助于我们更好的理解View的工作原理. 1. 几个重要的方法: ...

  9. Android touch事件的派发流程

    Android TouchEvent事件传递机制 通俗易懂,能够了解Touch事件派发的基本流程. Android中的dispatchTouchEvent().onInterceptTouchEven ...

随机推荐

  1. 86.express里面的app.configure作用

    以下摘自 express 3.0 的 文档 app.configure([env], callback) Conditionally invoke callback when env matches ...

  2. 31.ng-init 指令初始化 AngularJS 应用程序变量。

    转自:https://www.cnblogs.com/best/tag/Angular/ 1. <html> <head> <meta charset="utf ...

  3. linux中的raid

    参考文档 http://www.cnblogs.com/ivictor/p/6099807.html 制作raid5 http://blog.51cto.com/11134648/2103384 RA ...

  4. POJ 3669 简单BFS

    标号 搜 完了-- //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #in ...

  5. js parseFloat 精度问题

    <script type="text/javascript"> //parseFloat function actionoftext(){var price = 10. ...

  6. 如何知道 CPU 是否支持虚拟化技术(VT)

    作者: Sk 译者: LCTT geekpi 我们已经知道如何检查你的 Linux 操作系统是 32 位还是 64 位以及如何知道你的 Linux 系统是物理机还是虚拟机.今天,我们将学习另一个有用的 ...

  7. 四 numpy操作数组输出图片

    一.读取一张图片,修改颜色通道后输出 # -*- coding=GBK -*- import cv2 as cv import numpy as np #numpy数组操作 def access_pi ...

  8. 洛谷P2839 [国家集训队]middle 主席树_二分

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <strin ...

  9. SQL Server存储ntext截断问题

    SQL Server存储ntext截断问题   最近遇到一个问题:将大文本存储到数据库的时候,查询出来的文本却被截断了. 最后百度发现,作者提出 sql server management studi ...

  10. POJ-1182 食物链 并查集(互相关联的并查集写法)

    题目链接:https://cn.vjudge.net/problem/POJ-1182 题意 中文题目,就不写了哈哈 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃 ...