android4.0.3 多点触控
来源:互联网 发布:汽车配件仓库软件 编辑:程序博客网 时间:2024/05/13 03:21
android上若想使屏幕同时监听到两个或者两个以上的手指触摸事件,那就要用到多点触控了,多点触控要求android sdk最低版本2.0。其实多点触控也没想象的那么难,难点就在操作的变换处理,例如,一个手指正在EVENT_MOVE的时候,另一个手指加入了触摸,这时,就要从单点状态转入多点状态的EVENT_MOVE,这时,第一个手指先移开与第二个手指先移开,状态又有所区别。。
多点触控的时候
也是写在ontouch 或ontouchEvent
event.getPointerCount()获得触摸个数
通过event.getPointerId(index) 根据索引获得触摸id。
event.getX(index) // index 第几个触摸点 从0开始 获得此点的X 坐标
event.getY(index)// 获得此点的Y 坐标
其他的MotionEvent 方法与单点触摸类似
注意触摸索引与触摸id的区别:
手指(触摸)索引:当前手指是第几个触摸的手指,如果前面的手指离开了,索引会减少。[比如 原本是1 但是前面的0离开了 ,1就变成了0]
手指(触摸)ID:当手指触摸后就会分配给他ID,手指离开不会对其他手指ID影响,但是新进入的手指ID会从0开始找到一个没有使用的id(比如ID 0 ,1 如果0 离开了 1不变,但是新进入的并不是2,而是重新使用0)
总结一下:
引索至于当前手指触摸的顺序有关。
而ID是已进入即不可改变,且数字不留空。后面进来的会补充空缺的。
触摸状态的变换:
先说下action的值:
简单的说就是id*256+多点action(多点时:down 5 up 6 move 2 单点时: down 0 up 1 move 2)
其实第二个体手指按下的action值是16进制数0×00000105 的值,第二个字节表示id 第一个字节表示action(多点时:down 5 up 6 move 2 单点时: down 0 up 1 move 2)
一、在多点触摸时,第二个手指先离开。
1:当点下第一个点时 action应该是0,此时还是认为是单点触摸。
此时此手指引索为0,ID为0;
2:当殿下第二个点时:action应该是261。第二个手指的引索为1 ID为1
此时已经被认为是多点触摸了。
3 : 当松开第二个手指时,action应该为:262,(256+6):
此时认为是多点触摸离开一个手指。
4:再松开第一个手指时,action应该为:1
此时只有一个手指在屏幕上,所以认为是单点触摸。
二、第一个手指先离开
与上1,2相同
3,当松开第一个手指时:action应该为:6(0*256+6)
此时认为是多点触摸。ID为0的手指离开。第二个手指的引索变为0,id还是1.
4: 当第二个手指 离开时,action为:1
此时如果按照前面的理论应该输出262(1*256+6) 但是android认为最后一个来开的手指触发的action必为1。
三、第一个手指先离开再按回来。
与上1,2相同
3,当松开第一个手指时:action应该为:6(0*256+6)
此时认为是多点触摸。ID为0的手指离开。第二个手指的引索变为0,id还是1.
4,当点回第一个手指时:aciton应该为:6
此时认为是多点触摸。ID为0的手指进入,引索为1。[此时第二个手指id为1,引索为0]
[新进入的手指会从0开始找ID如果 空缺就是用 而引索只是触摸的时间上的先后顺序来决定的]
5,当第二个手指离开时:action应该为:262(256+6)
如一的3~4
最后,对event.getAction()的处理:
pointerAction = event.getAction();
pointerId = event.getPointerId(0);//通过索引值得到id
if (event.getPointerCount() > 1) {// 手指触摸多于一个 与运算 和移位运算得出 pointerId;
pointerId = (pointerAction & MotionEvent.ACTION_POINTER_ID_MASK) >>>
MotionEvent.ACTION_POINTER_ID_SHIFT;
}
// 与运算得出 PointerAction 得到Action Down , move or Up
pointerAction = (event.getAction() & MotionEvent.ACTION_MASK) % 5;
// 根据pointer id 找到 对应的索引值
pointerIndex = event.findPointerIndex(pointerId);
}
- android4.0.3 多点触控
- android4.0.3多点触摸屏设备设置
- 多点触控
- android多点触控
- Android多点触控
- 多点触控
- 触摸屏多点触控
- android 多点触控
- android 多点触控
- 多点触控参数
- 多点触控
- 多点触控
- android 多点触控
- android 多点触控
- 多点触控 - MFC
- Android多点触控
- 多点触控1
- windows 多点触控
- JQuery实现的 checkbox 全选、反选。
- 几种常见的排序算法---选择排序
- Linux内核跟踪之trace框架分析
- Android ApiDemo分析(十)—— ListView的用法
- Android Tips
- android4.0.3 多点触控
- IIS上asp.net网站无法访问
- 使用code blocks连接mysql数据库的方法
- WebSphere8简介
- linux设备模型深探
- servlet helloworld(一)
- 归并排序
- 通过函数模板求 1+2+3+..+100
- 新奇的排序,求答案!