Android 简述touch事件中的MotionEvent
有关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的更多相关文章
- Android的Touch事件分发机制简单探析
前言 Android中关于触摸事件的分发传递是一个很值得研究的东西.曾不见你引入了一个ListView的滑动功能,ListView就不听你手指的指唤来滚动了:也不知道为啥Button设置了onClic ...
- Android对touch事件的拦截,在View Tree上的传递顺序
当发生touch事件时,系统会产生一个MotionEvent并且沿着View Tree开始传递.首先获取MotionEvent是View Tree的根节点,根节点通常是一个ViewGroup,View ...
- touch事件中的touches、targetTouches和changedTouches详解
touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...
- android 管理Touch事件
The onInterceptTouchEvent() method gives a parent the chance to see any touch event before its child ...
- 移动的 touch事件中的touches、targetTouches和changedTouches
touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...
- touch事件中的touches、targetTouches和changedTouches
touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表; 通过一个例子来区分一下 ...
- Android中的Touch事件
Android中的Touch事件处理 主要内容 Activity或View类的onTouchEvent()回调函数会接收到touch事件. 一个完整的手势是从ACTION_DOWN开始,到ACTION ...
- Android Touch事件之一:Touch事件在父ViewGroup和子View之间的传递篇
2015-11-26 17:00:22 前言:Android的Touch事件传递和View的实现紧密相连,因此理解Touch事件的传递,有助于我们更好的理解View的工作原理. 1. 几个重要的方法: ...
- Android touch事件的派发流程
Android TouchEvent事件传递机制 通俗易懂,能够了解Touch事件派发的基本流程. Android中的dispatchTouchEvent().onInterceptTouchEven ...
随机推荐
- WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
最近开始使用WebAPI,上手很容易,然后有些疑惑 1.WebAPI默认返回什么数据类型,json还是xml? 2.怎么修改WebAPI的返回数据类型,我用IE浏览器请 求返回的数据都是JSON格式的 ...
- java9新特性-20-Javascript引擎升级:Nashorn
1.官方Feature 236: Parser API for Nashorn 292: Implement Selected ECMAScript 6 Features in Nashorn 2.使 ...
- MyBatis、JDBC、Hibernate区别
从层次上看,JDBC是较底层的持久层操作方式,而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作. 从功能上看, JDBC就是简单的建立数据库连接,然 ...
- Wordpress 问题
迁移乱码 最近在做 wordpress 迁移,数据导入到服务器后,前后台都是乱码, phpMyAdmin 里的表数据就出现了乱码. 如果您也遇到和我一样的情况,本地使用 phpMyAdmin 导出 s ...
- PostgreSQL Replication之第七章 理解Linux高可用(2)
7.2 衡量可用性 可用性是提供商试图保证一定的可用性级别和客户可以期望的可用性或更多.在某些情况下(取决于服务合同) 收取罚款或减少申购费用是意外停机的原因. 可用性的质量使用百分数来衡量:例如,9 ...
- WinDBG help
WinDBG is a great, free tool. It is more powerful than Visual Studio's built-in debugger, but is har ...
- Chrome Service Model
Chrome Service Model John Abd-El-Malek February 2016 Objective Move Chrome codebase towards a servic ...
- mysql优化篇之表分区
当表的数据量达到一定数量时(如单个.myd文件都达到10G,myd 是mysql的数据文件),这时候读取起来必然效率很低. 1.从业务角度可以解决(分表) ...
- VUE框架学习——脚手架的搭建
#我的VUE框架学习 题记:初识VUE,觉得VUE十分的不错,故决定去深入的了解学习它,工欲善其事,必先利其器,下面是我搭建vue环境的过程! #一.项目搭建及初始化 1.安装:node.js:去官网 ...
- screen---管理会话
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换.GNU Screen可以看作是窗口管理器的命令行界面版本.它提 ...