多指触控中的检测问题

首先介绍一下具体的触屏识别情况,在多指触控时,手指不可能同时落到屏幕上,比如三个手指落到屏幕上,屏幕上的touchPoints的个数就是0 –> 1 -> 2 –> 3。同样的,如果三个手指从屏幕上拿掉,个数便会是3 –> 2 –> 1 –> 0的过程。这一点随便写一个Demo应该就能够很好的验证。

接下来引入一个场景,就是如果说当前的这个程序设计在单指的情况下有一个操作(比如选中),在双指的情况下会有另外的操作(比如拖动或是缩放 Pinch)。那么在做双指动作的时候自然会先做单指动作,那如何防止做出类似选中操作呢。类似的还有,单击和双击的区分?

解决的方法也是很简单的,就是通过两次接触的时间差,因为这种时间间隔非常短,可能是0.1s左右。具体的方法是,通过定时器(比如Qt中的QTimer),在TouchEvent变化的时候,判断统计每次的TouchPoints的个数,如果同之前的个数不同,那就启动或重启计时器;如果同之前的个数相同且计时器已经Timeout,那么就可以做出具体的手势操作。

当然,这样操作会有一个小bug,就是当单指的操作时间非常短的时候会有问题。具体的情况比如,单指迅速点击的选中,可能计时器还没结束就停止触摸操作了,这一点特殊处理一下就好了。