Android事件交互
来源:互联网 发布:wps word表格数据计算 编辑:程序博客网 时间:2024/06/05 01:39
前言
- 只是一些粗略的理解,以后会不断完善
推荐阅读
简书-MotionEvent详解
常用事件
MotionEvent.ACTION_DOWN: 0MotionEvent.ACTION_UP: 1MotionEvent.ACTION_MOVE: 2MotionEvent.ACTION_CANCEL: 3MotionEvent.ACTION_OUTSIDE: 4MotionEvent.ACTION_POINTER_DOWN: 5MotionEvent.ACTION_POINTER_UP: 6
获取事件
event.getAction()
和event.getActionMasked()
和MotionEventCompat.getActionMasked(event)
都可以获取事件类型。带有Mask标志的方法是针对多点触控的情况拿到的掩码。多点触控时,获取Action会返回每个触摸点的事件,其中使用pointerIndex区分每个触摸点。为了能表示每个pointerIndex对应的事件,以及更方便转化,每个获取的action实际上是pointerIndex和event拼接成的16进制表示,比如第二个点的Move事件,返回的值是
0x0100
,01表示pointerIndex,00表示Down事件,所以返回的action的值为256.单点触摸时只有一个pointerIndex = 0,所以获取的到的action实际上是0x0000(Down事件),0x0001(UP事件)。。。所以结果和事件的值是一样的。
当多点触摸时,第一个点的Down事件0x0000,第二个点的Down事件0x0100,此时简单的
getAction()
方法并不能获取正确的事件值。getActionMasked()
方法是将getAction()
的值与ACTION_MASK
做‘与’运算,例如当有一个事件是0x0102,获取掩码时可以过滤掉pointerIndex的值获取event的值,event.getActionMasked()
原理大致相同。
public static final int ACTION_MASK = 0xff;public static int getActionMasked(MotionEvent event) { return event.getAction() & ACTION_MASK;}
MotionEventCompat.getActionMasked()
是对版本兼容的方法。推荐使用这个类进行相关操作达到兼容版本的目的。
Pointer
pointer , pointerIndex , event , action , poiterId
pointer代表一个触摸点
- pointerIndex是pointer在MotionEvent中的索引
- event代表事件,比如0(Down),1(UP)…
- action是pointerIndex和event拼接的十六进制形式
- pointerId是一个pointer的唯一标示,他在整个事件流中是不会改变的,但是pointerIndex的值会改变,比如,先后放置三个指头在屏幕上会接收到
0x0000(第一个指头Down事件)
,0x0105(第二个指头Pointer_Down事件)
,0x0205(第三个指头Pointer_Down事件)
,抬起第二个指头时会触发0x0106(Pointer_Up)
,再抬起第三个指头也会触发0x0106(Pointer_Up)
,也就是说抬起第二个指头之后第三个指头的index由02变成了01,所以index只是MotionEvnet中每个事件的下标,与事件不能形成标志性的关系。
MotionEventCompat
MotionEventCompat是一个针对事件处理提供的辅助类,内部做了版本兼容。
getActionIndex(MotionEvent event)
获取该事件的索引,有点类似于MotionEventCompat.getActionMasked()
,都使用‘与’运算,只不过一个取的是高位的pointerIndex,后者取得是低位的event事件。
public static int getActionIndex(MotionEvent event) { return (event.getAction() & ACTION_POINTER_INDEX_MASK) >> ACTION_POINTER_INDEX_SHIFT; }
getPointerId(MotionEvent event, int pointerIndex)
在一个MotionEvent中根据触摸点pointerIndex的值获取pointerId
public static int getPointerId(MotionEvent event, int pointerIndex) { return IMPL.getPointerId(event, pointerIndex);}
findPointerIndex(MotionEvent event, int pointerId)
在一个MotionEvent中根据pointerId获取pointerIndex
public static int findPointerIndex(MotionEvent event, int pointerId) { return IMPL.findPointerIndex(event, pointerId);}
- 从一个MotionEvent中根据pointerIndex获取对应触摸点的XY坐标
public static float getX(MotionEvent event, int pointerIndex) { return IMPL.getX(event, pointerIndex);}public static float getY(MotionEvent event, int pointerIndex) { return IMPL.getY(event, pointerIndex);}
- Android事件交互
- Android交互体验必知:功能按键事件
- Android交互体验必知:功能按键事件
- Android交互体验必知:功能按键事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- Android交互体验必知:功能按键事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- Android交互体验必知:功能按键事件
- android webview js交互, 响应webview中的图片点击事件 .
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- 安卓横竖屏切换问题总结
- linux打乱以及纠正文件顺序指令
- POJ1328——Radar Installation(贪心)
- python re模块详解
- MySQL 手动清除binlog
- Android事件交互
- Android电源管理-休眠简要分析
- opentld
- 数据结构——图的简介及概念
- httpd 启动 时分别启动了 80 端口和8080 端口
- nrlsensorsim-2.27 installation
- Mongodb数据更新命令、操作符
- xilinx sdk Error while running ps7_init method.的问题
- Codeforces Round #382 (Div. 2) 735D - Taxes