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 ...
随机推荐
- Python Schema使用说明
转自https://segmentfault.com/a/1190000011777230 Python Schema使用说明 Schema是什么? 不管我们做什么应用,只要和用户输入打交道,就有一个 ...
- 再谈Ubuntu和CentOS安装好之后的联网问题(桥接和NAT、静态和动态ip)(博主推荐)
不多说,直接上干货! 首先,普及概念. hostonly.桥接和NAT的联网方式 对于CentOS系统,用的最多的就是,NAT和桥接模式 CentOS 6.5静态IP的设置(NAT和桥接联网方式都适用 ...
- jsLittle源码封装对象
window.JSLi = ((function(){ var JSLi = function(selector) { return new JSLi.fn.init(selector); }; JS ...
- @property 的本质是什么?
将访问.变量.访问控制进行了绑定:编译器负责自动合成. @dynamic:不会自动合成成员变量和存取方法. @property 的本质是什么?@property = ivar + getter + s ...
- PostgreSQL指定用户可访问的数据库pg_hba.conf
进入指定目录: # cd /var/lib/pgsql/9.3/data/ 使用vi编辑pg_hba.conf文件 # vi pg_hba.conf 以上配置为所有IP及网关都允许访问,使用MD5认证 ...
- word/excel/ppt 2 PDF
PHP 实现 word/excel/ppt 转换为 PDF 一般最常见的就是利用OpenOffice来转换,来看看实现的核心代码: class PDFConverter { private $com; ...
- PKU 2411 Mondriaan's Dream 状态DP
以前做过这题,今天又写了一次,突然发现写了一个好漂亮的DFS……(是不是太自恋了 - -#) 代码: #include <cstdio> #include <cstring> ...
- jquery中$.get()提交和$.post()提交有区别
jquery中$.get()提交和$.post()提交有区别吗? 相同点:都是异步请求的方式来获取服务端的数据: 异同点: 1.请求方式不同:$.get() 方法使用GET方法来进行异步请求的.$.p ...
- COGS——T 21. [HAOI2005] 希望小学
http://www.cogs.pro/cogs/problem/problem.php?pid=21 ★★ 输入文件:hopeschool.in 输出文件:hopeschool.out ...
- 洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair
P1209 [USACO1.3]修理牛棚 Barn Repair 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. ...