Android中OnTouchListener多点触摸

一般情况下,界面上的不同View是不可以一起按的。在某个View的按住状态下,其他View无法按下去。可能是有实现的办法我没找到,若有知晓,不令赐教。

下面说说在同一个View下触摸的情况。

MotionEvent类中有几个静态常量:

MotionEvent.ACTION_DOWN //0x0
MotionEvent.ACTION_POINTER_DOWN //0x5
MotionEvent.ACTION_POINTER_1_DOWN //0x5
MotionEvent.ACTION_POINTER_2_DOWN //0x105
MotionEvent.ACTION_POINTER_3_DOWN //0x205
MotionEvent.ACTION_MOVE //0x2
MotionEvent.ACTION_UP //0x1
MotionEvent.ACTION_POINTER_UP //0x6
MotionEvent.ACTION_POINTER_1_UP //0x6
MotionEvent.ACTION_POINTER_2_UP //0x106
MotionEvent.ACTION_POINTER_3_UP //0x206
MotionEvent.ACTION_POINTER_ID_MASK //0xff00

以下是多点测试结果:

第一个手指按下时,e.getAction() == 0×0,e.getPointerCount() == 1,触发ACTION_DOWN;

此时第二个手指按下,e.getAction() == 0×105,e.getPointerCount() == 2,触发ACTION_POINTER_2_DOWN;

松开第二个手指,e.getAction() == 0×106,e.getPointerCount() == 2,触发ACTION_POINTER_2_UP;

松开第一个手指,e.getAction() == 0×1,e.getPointerCount() == 1,触发ACTION_UP;

倘若最后2部循序颠倒:

先松开第一个手指,e.getAction() == 0×6,e.getPointerCount() == 2,触发ACTION_POINTER_1_UP;

松开第二个手指,e.getAction() == 0×1,e.getPointerCount() == 1,触发ACTION_UP;

根据以上的测试结果,可通过

e.getAction() == MotionEvent.ACTION_DOWN || (e.getAction() & 0xff) == MotionEvent.ACTION_POINTER_DOWN

来判断是按下操作,通过

(e.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> 8

来获取此次按下的pointerId,再通过e.getX(pointerId)和e.getY(pointerId)来获取此次按下的手机的坐标。ACTION_UP同理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值