有关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. poj_1974,最长回文字串manacher

    时间复杂度为O(n),参考:http://bbs.dlut.edu.cn/bbstcon.php?board=Competition&gid=23474 #include<iostrea ...

  2. 【转】android新组件RecyclerView使用介绍和进阶使用,替用Gallery

    简介: RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,但是直接把viewholder的实现封装起来,用 ...

  3. 数位$dp$

    数位\(dp\)搞了一上午才搞懂.靠这种傻\(X\)的东西竟然花了我一上午的时间. 数位\(dp\) 概念 数位\(dp\)就是强制你分类一些数,例如给你一段区间,然后让你求出不包含\(2\)的数的个 ...

  4. 怎么去除innerHTML获得内容中的标签?

    去掉innerHTML获得内容里面的标签: <body> <div id="d1"><p id="p1">hello wor ...

  5. 关于md解析器

    不得不说,博客园的 md 解析器真的不够好.和 csdn 以及 sf 社区的比起来,差太多了.以后,博客园就老老实实写随笔了,文章类的还是用 csdn 吧.

  6. OpenGL编程(四)改变窗口大小时保持图形的原形

    前面的例子,当我们通过拖拉的方法改变窗口的长宽比例时,窗口里的图形的长宽也相应地伸缩,导致图形变形.如下图: 正如上图所示,当我们把窗口宽度拉长后,图形就会显得比较胖.同样,当我们把窗口的高度拉长后, ...

  7. ReactiveCocoa简单使用20例

    ReactiveCocoa简单使用20例 1. 观察值变化 你别动,你一动我就知道. //当self.value的值变化时调用Block,这是用KVO的机制,RAC封装了KVO @weakify(se ...

  8. c#DataGridView复制粘贴删除功能

    //可在dgv中复制.剪切.粘贴.删除数据 /// <summary> /// DataGridView复制 /// </summary> /// <param name ...

  9. file_get_contents 无法采集 https 网站

    <?php echo file_get_contents("https://www.baidu.com"); ?> 运行以上代码会报以下错误: 再运行一次去看看!

  10. Windows7 安装ubuntu双系统

    家里的老笔记本是MBR分区,不支持EFI , 一开始是用U盘安装的,还对着ubuntu官网的教程,下载了官方推荐的那个u盘引导工具,安装依然会报错, 网上查询也有很多种说法,也有说是bug的,无论如何 ...