CN116166143A - 全局触摸手势识别方法 - Google Patents
全局触摸手势识别方法 Download PDFInfo
- Publication number
- CN116166143A CN116166143A CN202310449386.3A CN202310449386A CN116166143A CN 116166143 A CN116166143 A CN 116166143A CN 202310449386 A CN202310449386 A CN 202310449386A CN 116166143 A CN116166143 A CN 116166143A
- Authority
- CN
- China
- Prior art keywords
- gesture
- touch
- list
- event
- active
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/03—Arrangements for converting the position or the displacement of a member into a coded form
- G06F3/041—Digitisers, e.g. for touch screens or touch pads, characterised by the transducing means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V40/00—Recognition of biometric, human-related or animal-related patterns in image or video data
- G06V40/20—Movements or behaviour, e.g. gesture recognition
- G06V40/28—Recognition of hand or arm movements, e.g. recognition of deaf sign language
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Health & Medical Sciences (AREA)
- Psychiatry (AREA)
- Social Psychology (AREA)
- Multimedia (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明涉及全局触摸手势识别方法,包括如下步骤:初始化手势识别器;获取手势触摸全局事件;初始化手势列表,处理手势触摸全局事件,将手势列表中与手势触摸全局事件不相符的手势删除,针对最终剩下的手势发出start信号或trigger信号;其中,start信号表示相应的手势作出后就触发动作,trigger信号表示相应的手势完成后再触发动作;手势识别器接收手势的start信号或trigger信号,并由此触发相应的动作。本发明提供了对多指手势的支持,支持在多种国产PC和国产触摸屏下的多指手势识别和多指手势动作执行,同时兼容X11和Wayland环境。
Description
技术领域
本发明涉及手势识别技术领域,具体涉及基于ukui-kwin所实现的全局触摸手势识别方法。
背景技术
ukui-touchegg是上一代的全局手势解决方案,该方案主要包含三部分:定制修改的xserver、ukui-touchegg客户端、ukui-touchegg服务端,主要结构和数据流向见图1。
1.XServer***:XServer中加入了***Patch,负责拦截由Xserve驱动上报的事件,只有点击在黑名单应用上的事件不会被拦截;
2.ukui-touchegg服务端:负责从libinput采集事件,并将事件通过本地socket转发给ukui-touchegg客户端;
3.ukui-touchegg客户端:
(1)***:拦截点击在黑名单应用上的事件,和XServer***作用相反;
(2)手势识别器:根据动作将手势识别为Swipe、Pinch、EdgeSwipe和LongPress,并识别手势的方向;
(3)手势动作执行器:执行配置的手势动作,如果没有识别成手势,会在识别完成后发出鼠标的点击、移动、抬起事件。
4. xserver-xorg-input:
1)物理设备
2)内核
3)XServer 输入驱动
4)XServer
5)应用
目前主流的XServer输入驱动有xserver-xorg-input-libinput和xserver-xorg-input-evdev。二者的区别是,一个使用libinput接口获得内核上报的输入事件,一个使用evdev的接口获得内核上报的输入事件。
Libinput的含义:在Linux上可以通过libinput的接口来监听内核上报的输入事件,libinput使用evdev接口实现,对evdev进行了进一步的封装,更便于使用。
Linux中“一切皆为文件”,输入设备也不例外。输入设备会被抽象成/dev/input目录下的event文件,例如/dev/input/event10。所有输入设备的事件,都会通过这个设备对应的event文件向外界上报。evdev和libinput就是通过解析event文件上报的数据,来获得的内核上报的事件。
ukui-touchegg全局手势解决方案主要的工作流程见图2。
现有技术基于开源方案touchegg发展而来。对于大部分应用,XServer都会拦截触摸事件,而触摸事件会由ukui-touchegg处理后,根据手势识别的情况发送给应用,如果没有任何手势发生,则会转译鼠标事件发给应用。
为了对于部分应用提供原生触摸事件,提供了一个黑名单机制,对于在黑名单中的应用,XServer不会拦截其中的事件,ukui-touchegg也不会处理发生在其上的触摸事件,因此,现有技术存在如下缺点:
1、会拦截所有触摸事件,不便于应用自己实现触摸兼容。尽管提供了黑名单机制,但是还是需要手动在黑名单中添加对象,无法兼容所有应用;
2、直接从libinput跨级获取事件,而旋转、多屏映射这些功能都是由显示服务一级支持的,越过xserver直接从libinput获取事件的话,需要单独处理多屏映射和旋转;
3、对于部分手势,比如“上下滑动发送滚轮事件”,“左右滑动发送 alt+方向左/右键 进行前进后退”,仅希望在部分区域生效,但是由于 ukui-touchegg 无法判断触摸位置的控件类型,因此只能在全局生效,很容易产生冲突而且交互体验不好;
4、滚动只能在滑动的时候向应用发送滚轮事件,无法非常流畅的进行滚动。
发明内容
为解决已有技术存在的不足,本发明提供了一种全局触摸手势识别方法,包括如下步骤:
步骤S1:初始化手势识别器;
步骤S2:获取手势触摸全局事件;
步骤S3:初始化手势列表,处理手势触摸全局事件,将手势列表中与手势触摸全局事件不相符的手势移除,针对最终剩下的手势发出start信号或trigger信号;其中,start信号表示相应的手势已作出,trigger信号表示相应的手势已完成;
步骤S4:手势识别器接收手势的start信号或trigger信号,并由此根据手势识别器中对应手势的设置触发相应的动作。
其中,所述步骤S2中,通过ukui-kwin内部的输入模块获得手势触摸全局事件,针对X11环境,通过如下步骤获得手势触摸全局事件:
步骤S21:在ukui-kwin中监听XRawTouchEvent;
步骤S22:将收到的XRawTouchEvent转给ukui-kwin的输入模块;
步骤S23:ukui-kwin的输入模块将事件转发给手势识别模块进行识别。
其中,所述步骤S2中,通过ukui-kwin内部的输入模块获得手势触摸全局事件,针对Wayland环境,通过如下步骤获得手势触摸全局事件:
步骤S2a:ukui-kwin获得来自libinput的触摸事件;
步骤S2b:将收到的触摸事件转发给ukui-kwin的输入模块;
步骤S2c:ukui-kwin的输入模块将事件转发给手势识别模块。
其中,所述步骤S3中,所处理的手势触摸全局事件涉及TouchDown、TouchMove和TouchUp事件,分别对应手指按下、手指移动和手指抬起;
在手势触摸全局事件中,所涉及到的手势包括Swipe、Pinch及Long Press,其中,Swipe手势代表手指在屏幕上的平移动作、Pinch手势代表手指在屏幕上的捏合或张开动作,LongPress手势代表手指在屏幕上的长按动作。
其中,所述步骤S3中,TouchDown事件的处理方法包括:
步骤S31:收到TouchDown事件后重置手势起始时间;
步骤S32:计算此次TouchDown事件中新加入的手指的触摸点id;
步骤S33:将新的触摸点加入触摸点列表中;
步骤S34:计算此次TouchDown事件中涉及到的手指的外接矩形的几何中心;
步骤S35:从手势列表中获得一个手势;
步骤S36:判断所获取的手势是否为Swipe手势,若是,判断该Swipe手势所对应的手指数和起始位置是否与此次TouchDown事件所识别的手指数和起始位置相吻合,如果吻合,则将当前所获取的手势记录为活动手势,并重新执行步骤S35,从手势列表中获取下一个手势;若不是,则执行步骤S37;
步骤S37:判断所获取的手势是否为Pinch手势,若是,判断该Pinch手势所对应的手指数是否与此次TouchDown事件所识别的手指数相吻合,如果吻合,则将当前所获取的手势记录为活动手势,并重新执行步骤S35,从手势列表中获取下一个手势;若不是,则执行步骤S38;
步骤S38:判断所获取的手势是否为LongPress手势,若不是,则重新执行步骤S35,从手势列表中获取下一个手势;若是,判断该LongPress手势所对应的手指数和起始位置是否与此次TouchDown事件所识别的手指数相吻合,如果吻合则开启定时器且在定时器到达阈值时间时触发与LongPress手势相关的start信号,且将当前所获取的手势记录为活动手势,并重新执行步骤S35,从手势列表中获取下一个手势;
循环执行步骤S35-步骤S38,直至遍历完手势列表中的所有手势,得到一个活动手势列表。
其中,所述步骤S3中,TouchMove事件的处理方法包括:
步骤S3a:收到TouchMove事件后更新当前手指的触摸信息和外接矩形;
步骤S3b:根据外接矩形的面积和几何中心的变化状态来判断TouchMove事件所对应的手势类型是否为一个成功的手势,如果是则执行步骤S3c,如果不是则不做任何处理,继续等待后续事件;
步骤S3c:待手势的移动能够被识别为一个成功的手势后,在第一轮事件处理中进行如下步骤的操作;
步骤S3d:取消定时器计时操作;
步骤S3e:从当前的活动手势列表中获取一个手势;
步骤S3f:判断所获取的手势的类型与步骤S3c中所识别的手势类型是否一致,如果不一致,则将所获取的手势从活动手势列表中移除,并重新从步骤S3e执行,从活动手势列表中获取下一个手势,如果一致,则执行步骤S3g;
步骤S3g:判断所获取的手势的方向与步骤S3c中所识别的手势的方向是否一致,如果不一致,则将所获取的手势从活动手势列表中移除,并重新从步骤S3e执行,从活动手势列表中获取下一个手势,如果一致,则执行步骤S3h;
步骤S3h:判断步骤S3c所识别的手势的移动距离是否满足所获取的手势的最小移动距离要求,若满足,则触发所获取的手势的start信号,并重新从步骤S3e执行,从活动手势列表中获取下一个手势,若不满足,则直接重新从步骤S3e执行,从活动手势列表中获取下一个手势;
循环执行步骤S3e-步骤S3h,直至遍历完活动手势列表中的所有手势。
其中,所述步骤S3中,TouchMove事件的处理方法中,待手势的移动能够被识别为一个成功的手势后,在第二轮事件及其之后的处理中进行如下步骤的操作;
步骤S3i:从当前的活动手势列表中获取一个手势;
步骤S3j:判断当前已识别到的手势方向、类型、手指数是否和所获得的手势信息一致,若一致,则执行步骤S3k;若不一致,将所获手势从活动手势列表中移除,并获取下一个手势;其中,在将手势从活动手势列表移除前,判断手势是否已触发start信号,若已触发,则针对该手势触发cancel信号;
步骤S3k:判断所获取的手势是否已经触发start信号,若已经触发,则针对所获取的手势触发reach信号,并重新执行步骤S3i,从活动手势列表中获取下一个手势;
若没有触发start信号,则判断步骤当前所识别到的手势的移动距离是否满足当前从活动手势列表中所获取的手势的最小移动距离,若满足,则针对所获取的手势触发start信号,并重新执行步骤S3i,从活动手势列表中获取下一个手势,若不满足,则直接重新执行步骤S3i,从活动手势列表中获取下一个手势;
循环执行步骤S3i至步骤S3k,直至遍历完活动手势列表中的所有手势。
其中,所述步骤S3中,TouchUp事件的处理方法包括:
步骤S3l:收到TouchUp事件后判断TouchUp事件与TouchDown事件发生时手指的移动距离;
步骤S3m:从活动手势列表中获取一个手势;
步骤S3n:判断所获取的手势是否为Pinch手势;
若所获取的手势是为Pinch手势,则判断当前全局事件中所识别的手势是否为Pinch手势:若是,针对所获取的手势发出trigger信号,并重新执行步骤S3m,从活动手势列表中获取下一个手势;若不是,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;
若所获取的手势不是Pinch手势,则执行步骤S3o;
步骤S3o:判断所获取的手势是否为Swipe手势;
若所获取的手势是为Swipe手势,则判断当前全局事件中所识别的手势是否为Swipe手势:若是,判断所识别的手势是否满足所获取的手势的最小距离要求,若满足,则发出trigger信号,并重新执行步骤S3m,从活动手势列表中获取下一个手势,若不满足,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;若不是,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;
若所获取的手势不是Swipe手势,则执行步骤S3p;
步骤S3p:判断所获取的手势是否为LongPress手势;
若所获取的手势是LongPress手势,则判断该手势的长按时间是否满足要求,若不满足,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;若满足,则触发所获取的手势的trigger信号,并重新执行步骤S3m,从活动手势列表中获取下一个手势;
若所获取的手势不是LongPress手势,则重新执行步骤S3m,从活动手势列表中获取下一个手势;
步骤S3q:循环执行步骤S3m-步骤S3p,直至遍历完活动手势列表中的所有手势。
其中,在手势触摸全局事件中,手势涉及的手指数目包括单指和多指,单指的Swipe手势的成功识别需满足移动位置在一个最小距离和最大距离的区间内,且在移动过程中,手指所经过的位置在一个容错区间内;
该容错区间的确定方法为:以手指起点做圆心,以最大距离做半径画圆,在该圆内确定一个第一扇形,经过手指移动起点和移动终点的射线能够将第一扇形均分为两个第二扇形,则所确定的第一扇形为容错区间。
其中,手势涉及的手指数目包括多指时,根据多指的各触摸点确定一个外接矩形,并确定外接矩形的对角线长度和几何中心,根据如下原则判断多指的手势:
如果对角线长度变长,则认为多指发生了Pinch手势,方向为张开;
如果对角线长度变短,则认为多指发生了Pinch手势,方向为捏合;
如果几何中心发生了移动,则认为多指发生了Swipe手势,多指以其相对应的几何中心移动的情况确定Swipe手势是否能够成功识别,其Swipe手势成功识别需满足的条件与单指相同。
本发明提供的全局触摸手势识别方法,提供了对多指手势的支持,支持在多种国产PC和国产触摸屏下的多指手势识别和多指手势动作执行,同时兼容X11和Wayland环境。
附图说明
图1:已有技术的全局手势识别逻辑框架图。
图2:已有技术的全局手势识别流程图。
图3:本发明的手势识别器初始化工作流程图。
图4:本发明的TouchDown事件的处理流程图。
图5:本发明的TouchMove事件的第一轮处理流程图。
图6:本发明的TouchMove事件的第二轮之后的处理流程图。
图7:本发明的TouchUp事件的处理流程图。
图8:本发明的单指滑动手势识别逻辑图。
图9:本发明的五指点击时外接矩形的示意图。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
在详述本发明的技术方案前,对本发明涉及到的技术术语解释及约定如下:
1、TouchDownEvent:一个手指按到触摸屏上产生的事件,在支持多点触控的场景下,多个手指按下时,每根手指都会有一个对应的TouchDownEvent。
2、TouchMoveEvent:一个手指在按下之后在屏幕上移动产生的事件,可以理解为手指移动事件,在支持多点触控的场景下,多个手指同时移动时,每个移动的手指都会产生自己的TouchMoveEvent。
3、TouchUpEvent 一个手指从触摸屏抬起产生的事件,在支持多点触控的场景下,多个手指抬起时,每个抬起的手指都会产生自己的TouchUpEvent。
4、 触摸序列:一个手指从TouchBegin到TouchEnd,为一个触摸序列,每个进行触摸的手指都有自己的触摸序列
5、X11 :桌面环境的一种窗口***,负责显示、输入等,是桌面环境的基础。
6、Wayland和X11类似,但比X11要新,目前一部分Linux桌面***已经开始使用Wayland作为默认环境。
7、Swipe手势,手指在屏幕上平移。
8、Pinch手势,手指在屏幕上捏合或张开。
9、LongPress手势,手指长按。
本发明的全局触摸手势识别方法,涉及初始化手势识别器、获取手势触摸全局事件、处理手势触摸全局事件并根据处理结果发出start信号或trigger信号,并由此触发相应的动作。
一、手势识别器
手势识别器的初始化工作主要包括以下几个步骤(见图3):
1、读取手势配置文件;
2、针对手势配置文件中的每个手势生成一个手势对象Gesture和一个对应手势触发动作的对象Action实例;其中,Gesture定义了这个手势的类型、手指数、是否连续重复触发等属性;Action定义了在Gesture被触发时,会执行什么动作,如发出模拟案件、调用命令等;
3、 将手势的Action实例连接到对应的Gesture对象的start和trigger信号,Gesture对象在状态发生变化的时候会发送信号通知对应的Action对象;
例如触摸长按屏幕弹出右键菜单,Gesture是长按手势,对应的Action对象实现弹出右键菜单功能,在长按时间满足Gesture要求后,Gesture会通知Action对象手势触发,促使Action对象让右键菜单弹出。
4、完成初始化,等待触摸事件输入。
二、获取手势触摸全局事件
整个手势模块都集成在窗口管理器ukui-kwin中,通过kwin的输入模块统一接收事件,同时由于ukui-kwin的输入模块没有在x11环境下监听全局事件的功能,我们增加了X11环境下的事件采集器,采集器主要工作流程如下:创建单独线程监听XRawTouchEvent,将XRawTouchEvent传递给ukui-kwin的输入模块。
目前主流的显示架构有X11和Wayland,在这两种方案下,获得桌面环境获得输入事件的方式不同。本发明中为了尽可能减少这种不同,复用了ukui-kwin内部的输入模块。
本发明在X11环境下,获得触摸事件需要以下几步:
1、在ukui-kwin中监听XRawTouchEvent;
2、将收到的XRawTouchEvent转给ukui-kwin的输入模块;
3、ukui-kwin的输入模块将事件转发给手势识别模块进行识别。
其中,XRawTouchEvent泛指XServer中所有的全局触摸事件类型,包括XI_RawTouchBegin、XI_RawTouchUpdate、XI_RawTouchEnd。与不带Raw标记的XI_TouchBegin区别在于,XI_TouchBegin事件是针对某个具体窗口的,而XI_RawTouchBegin是全局事件。
其中第三步是复用了ukui-kwin原本的输入架构,我们只需要在手势识别模块根据输入模块的要求实现对应的接口接收事件即可。
本发明的方案复用了ukui-kwin中在Wayland环境下的输入,在Wayland下,手势获得触摸事件需要以下几步:
1.ukui-kwin获得来自libinput的触摸事件;
2.将收到的触摸事件转发给ukui-kwin的输入模块;
3.ukui-kwin的输入模块将事件转发给手势识别模块。
其中每一步都是复用ukui-kwin的输入架构,我们只需要在手势识别模块根据输入模块的要求实现对应的接口接收事件即可。
三、处理手势触摸全局事件
一个完整的全局事件涉及TouchDown、TouchMove(长按手势不涉及此事件)和TouchUp。下文详述具体的处理方法。
首先约定,以下术语中,所获取的手势为针对手势竞技场中的手势,也即,用户初始化时所设定的一个手势列表中的手势,所识别的手势为用户在移动屏幕上实际操作时所产生的手势,以下的所有事件处理的核心逻辑,即是从所获取的手势中找到与所识别的手势一致的手势,并触发相关的信号。
其次,先举例说明本发明的一个初始化的手势列表,例如包括了如下手势:
(一)TouchDown事件
图4为本发明的TouchDown事件的处理流程,如图4所示,一个完整的TouchDown事件的处理流程包括:
1、收到TouchDown事件后重置手势起始时间;
2、计算此次TouchDown事件中新加入的手指的触摸点id;
3、将新的触摸点加入触摸点列表中;
4、计算此次TouchDown事件中涉及到的手指的外接矩形的几何中心;
5、从手势列表中获得一个手势;
6、判断所获取的手势是否为Swipe手势(对应图中“Gesture 为Swipe类型”),若是,判断该Swipe手势所对应的手指数和起始位置是否与此次TouchDown事件所识别的手指数和起始位置相吻合,如果吻合,则将当前所获取的手势记录为活动手势,并重新执行步骤5,从手势列表中获取下一个手势;若不是,则执行步骤7;
7、判断所获取的手势是否为Pinch手势(对应图中“Gesture 为Pinch类型”),若是,判断该Pinch手势所对应的手指数是否与此次TouchDown事件所识别的手指数相吻合,如果吻合,则将当前所获取的手势记录为活动手势,并重新执行步骤5,从手势列表中获取下一个手势;若不是,则执行步骤8;
8、判断所获取的手势是否为LongPress手势(对应图中“Gesture 为Long Press类型”),若不是(这其实是一个错误手势),则重新执行步骤5,从手势列表中获取下一个手势,若是,判断该LongPress手势所对应的手指数和起始位置是否与此次TouchDown事件所识别的手指数相吻合,如果吻合则开启定时器且在定时器到达阈值时间时触发与LongPress手势相关的start信号,且将当前所获取的手势记录为活动手势,并重新执行步骤5,从手势列表中获取下一个手势;
循环执行步骤5-步骤8,直至遍历完手势列表中的所有手势,得到一个活动手势列表。
也即,步骤5-8为循环步骤,通过遍历手势列表,获取与当前TouchDown事件相吻合的手势。
情景1举例:两个手指摁在屏幕上后,触发了TouchDown事件,在目前的手势列表中,只有编号1-2、13-21及23的手指数与相吻合,因此,经过步骤1-8后,会将列表中编号1-2、13-21及23的手势记录为活动手势,由此得到活动手势列表。
需要注意的是,对于Swipe手势,其包括了从屏幕内部移动以及边缘移动,所以在进行手势判断的时候,除了判断手指数外,还需要额外检查当前所摁下去的手指的起始位置是否满足要求(上文所列手势列表中没有完善起始位置,现假设所摁下去的两个手指的起始位置都满足要求)。
(二)TouchMove事件
经过TouchDown事件的处理后,目前的活动手势列表中剩下编号1-2、13-21及22所对应手势,图5为本发明的TouchMove事件的处理流程,如图5及图6所示,本发明将经过如下的完整的TouchMove事件的处理流程,对手势列表进行进一步的筛选:
1、收到TouchMove事件后更新当前手指的触摸信息和外接矩形;
2、根据外接矩形的面积和几何中心的变化状态来判断TouchMove事件所对应的手势类型是否为一个成功的手势,如果是则执行步骤3,如果不是则不做任何处理,继续等待后续事件;
因为TouchMove事件为发生最为频繁的事件,由于手指存在抖动,因此在实际判断过程中,不能因为手指在屏幕上移动一个像素就认为发生了TouchMove事件,判断TouchMove事件的前提是手指的移动距离需满足一个最小阈值(下文详述)。
根据外接矩形变化判断手势类型的包括:如果矩形的面积变大或变小,认为当前是Pinch手势,面积变小为手指捏合,面积变大为手指张开;如果矩形面积没有变化,而矩形的几何中心移动了,则认为是在进行Swipe,方向由矩形几何中心的移动方向为准。如果手指活动后其外接矩形的面积和几何中心没有发生变化则不做任何处理,继续等待后续事件。
3、请参见图5,待手势的移动能够被识别为一个成功的手势后,在第一轮事件处理中进行如下步骤的操作;
31、取消定时器计时操作;
32、从当前的活动手势列表中获取一个手势;
33、判断所获取的手势的类型与所识别的手势类型是否一致,如果不一致,则将所获取的手势从活动手势列表中移除,并重新从步骤32执行,从活动手势列表中获取下一个手势,如果一致,则执行步骤34;
34、判断所获取的手势的方向与所识别的手势的方向是否一致,如果不一致,则将所获取的手势从活动手势列表中移除,并重新从步骤32执行,从活动手势列表中获取下一个手势,如果一致,则执行步骤35;
35:判断所识别的手势的移动距离是否满足最小移动距离,若满足,则触发所获取的手势的start信号,并重新从步骤32执行,从活动手势列表中获取下一个手势,若不满足,则直接重新从步骤32执行,从活动手势列表中获取下一个手势;针对没有最小移动距离的手势而言,默认所识别的手势的移动距离满足其最小移动距离,下同;
循环执行步骤32-步骤35,直至遍历完活动手势列表中的所有手势。
第一***作的意义在于将与所识别的手势的方向或类型不一致手势均从活动手势列表中移除,如两指摁下去之后发生了向右滑动操作,则经过第一轮的遍历后,编号1-2、13-18及23均从活动手势列表中移除,剩下编号19-21手势,分别对应至少右移20像素、至少右40像素及至少右60像素。此时,假设一个手势被成功识别的条件是至少移动20像素,那么在两指右移20像素的过程中,Touchmove事件频繁发出,直至右移到20像素的距离时,上文步骤2的条件满足,才会进行步骤3的操作(触发第一轮TouchMove事件处理流程)。
4、请参见图6,同样为收到Touchmove事件后更新外接矩形,待手势的移动能够被识别为一个成功的手势后,在第二轮事件及其之后的处理中进行如下步骤的操作;
需要注意的是:在第一轮TouchMove事件完成之后,后续的Touchmove事件中手势被成功识别的条件是:以上一轮TouchMove事件触发处理的手指临界点(而非最初手指摁下去的临界点)为准,当前手指相对于该临界点的动作满足成功识别的条件;情景举例:在两指右移20像素时,手势19started,右移至40像素时(相对于上一轮Touchmove事件识别临界点再次右移了20像素,也即一个临界阈值的值),手势20started。
41、判断当前所识别的手势的类型和方向是否与上一轮事件中所识别的手势的类型和方向一致,若一致,则执行步骤42;
若不一致,则针对活动手势列表中所有已经触发出start信号的手势发出cancel信号,并将所有与上一轮事件所识别的手势的类型和方向均一致的手势从活动手势列表中移除(在此情况下活动手势列表中将没有手势剩余),同时结束当前流程;
42、从当前的活动手势列表中获取一个手势;
43、判断在当前事件中所识别到的手势方向、类型、手指数是否和所获得的手势信息一致,若一致,则执行步骤44;若不一致,将所获手势从活动手势列表中移除,并获取下一个手势;其中,在将手势从活动手势列表移除前,判断手势是否已触发start信号,若已触发,则针对该手势触发cancel信号;
此步骤的本质实质上是判断当前所识别的手势类型和方向与上一轮事件中所识别的手势类型和方向是否一致,因为经过TouchDown事件以及第一轮TouchMove事件处理后,目前的活动手势列表中所保留的仅为方向、类型和手指数均满足第一轮事件中手势的方向、类型和手指数,故,若在后续的TouchMove事件中发现其中任一条件发生了变化,则目前活动手势列表中的手势均不满足,那么经过步骤42处理后,活动手势列表中剩下的手势将全部被清空(此种情况下手指在屏幕上后续的其它动作将不会触发任何操作)。这种情况类似于在两指右移的过程中,发生了左移或者其它动作,在此情况下认为用户想要结束右移的触摸操作。
另外,本发明还可视使用场景的需要,针对活动手势列表中的活动手势在最小移动距离之外设置一个最大移动距离(下文详述),手指移动到最小移动距离的时候触发该手势的start信号,移动到最大移动距离的时候触发该手势的cancel信号,并将手势从活动手势列表中移除。此种场景如仅需要在手指移动过程中触发start信号,但不希望手指移动过多并抬起的时候触发trigger信号(下文详述),故对此手势设置一个最大移动距离。
44、判断所获取的手势是否已经触发start信号,若已经触发,则针对所获取的手势触发reach信号,并重新执行步骤42,从活动手势列表中获取下一个手势;
若没有触发start信号,则判断所识别到的手势的移动距离是否满足当前从活动手势列表中所获取的手势的最小移动距离,若满足,则针对所获取的手势触发start信号,并重新执行步骤42,从活动手势列表中获取下一个手势,若不满足,则直接重新执行步骤42,从活动手势列表中获取下一个手势;
循环执行步骤42至步骤44,直至遍历完活动手势列表中的所有手势。
Start信号代表相关手势已经开始执行,reach信号代表相关的手势正在进行中。
情景举例1:仍以20像素作为触发Swipe手势的阈值,针对编号19的手势,两指右移20像素时,该手势被触发,start信号发出,之后,两指继续右移了60像素,在此过程中在两指右移40像素及60像素时,分别满足了两次Swipe手势的reach条件,编号19的手势分别发出了两次reach信号,此种情形适用于需要持续发出一个动作的场景,例如:
假设现在我们有个手势,两指右移,会发出alt+tab的快捷键也就是切换窗口,但是我们希望可以做到,切换窗口的界面在我手势完成前都显示,且每经过一段距离(如20像素),就切换到下一个窗口,对应了使用键盘用Alt+Tab时,按住Alt不动,每按一下Tab就换一个窗口。此时在第一次手势别识别成了两指方向向右的Swipe时,会让这个Gesture发出start信号,此时这个Gesture正在start。这时会发出Alt+Tab,且Alt是按住状态。
然后在后续的TouchMove中,只要仍然满足手势条件,且移动距离超过20像素,就发出一个reach信号,在收到这个信号之后,对应的Action对象会发出一个Tab按键事件。如果在TouchMove过程中,我们向其他方向移动了,这时候不满足条件了,那么发出cancel信号,此时Action收到cancel后会松开Alt。
需要注意的是,由于手势列表中还有编号20和21,故在两指右移到40像素时,不仅会触发编号19手势的reach信号,还会触发编号20的start信号;同样的,在两指右移到60像素时,不仅会触发编号19和编号20的reach信号,还会触发编号21的start信号,那么为了避免各信号之间的相互干扰,需在设置上避免此问题出现。承上,如果两指持续右移时,仅需要编号19的手势持续发出start信号及reach信号,以持续打开窗口,那么在最初设置的时候,可直接不设置编号20和21的手势,或者,将编号20及21手势的start信号及reach信号设置为不执行任何操作。
情景举例2:假设需要两指右移的过程中分别触发不同的操作,如A操作、B操作及C操作,那么可以针对编号19-21手势的设置为待其start信号发出时分别执行A操作、B操作及C操作,同时,为了避免编号19手势在两指右滑到40像素及60像素时发出的reach信号对编号20及21手势的发出的start信号造成干扰,也为了避免编号20手势在两指右滑到60像素时发出的reach信号对编号21手势的发出的start信号造成干扰,可将编号19-21手势的reach信号对应的操作均设置为不执行任何操作。
(三)TouchUp事件
TouchUp事件对应手指抬起,也即,到了此时,一个完整的触摸事件已结束,TouchUp事件的处理流程请参见图7所示,包括如下步骤:
1、收到TouchUp事件后判断TouchUp事件与TouchDown事件发生时手指的移动距离;
2、从活动手势列表中获取一个手势;
3、判断所获取的手势是否为Pinch手势(对应图中“Gesture类型为Pinch”);
若所获取的手势是为Pinch手势,则判断当前全局事件中所识别的手势是否为Pinch手势:若是,针对所获取的手势发出trigger信号(因为Pinch手势没有最小移动范围的要求,所以只要是Pinch手势,就可以触发trigger信号),并重新执行步骤2,从活动手势列表中获取下一个手势;若不是,则将所获取的手势从活动手势列表中移除,并重新执行步骤2,从活动手势列表中获取下一个手势;
若所获取的手势不是Pinch手势,则执行步骤4;
4、判断所获取的手势是否为Swipe手势(对应图中“Gesture类型为Swipe”);
若所获取的手势是为Swipe手势,则判断当前全局事件中所识别的手势是否为Swipe手势:若是,判断所识别的手势是否满足所获取的手势的最小距离要求,若满足,则发出trigger信号,并重新执行步骤2,从活动手势列表中获取下一个手势,若不满足,则将所获取的手势从活动手势列表中移除,并重新执行步骤2,从活动手势列表中获取下一个手势;若不是,则将所获取的手势从活动手势列表中移除,并重新执行步骤2,从活动手势列表中获取下一个手势;
若所获取的手势不是Swipe手势,则执行步骤5;
5、判断所获取的手势是否为LongPress手势(对应图中“Gesture类型为LongPress”);
若所获取的手势是LongPress手势,则判断该手势的长按时间是否满足要求,若不满足,则将所获取的手势从活动手势列表中移除,并重新执行步骤2,从活动手势列表中获取下一个手势;若满足,则触发所获取的手势的trigger信号,并重新执行步骤2,从活动手势列表中获取下一个手势;
若所获取的手势不是LongPress手势,则重新执行步骤2,从活动手势列表中获取下一个手势(这其实是一个错误手势);
6、循环执行步骤2-步骤5,直至遍历完活动手势列表中的所有手势。
也即,在TouchUp事件处理流程中,针对Pinch手势和Swipe手势,需要将所获取的手势与识别的手势的类型再进行一次比对,如果比对不一致则将所获取的手势从活动手势列表中移除,如此设置是为了避免针对手指没有移动,也即没有进行TouchMove事件处理则直接进行TouchUp事件处理的情况下,不相关手势的干扰,如情景:手指摁下后,经过一定时间又抬起,由于手指没有移动(在没有移动的情况下,没有经过手势类型的识别,手势类型不属于活动手势列表中的任一种),则没有经过TouchMove事件的处理,那么Pinch手势和Swipe手势则都留在活动手势列表中,为了避免手指抬起时触发Pinch手势和Swipe手势的trigger信号,在TouchUp事件处理时,要经过比对将这些干扰手势移除。
需注意的是,在本事件处理中,在将相应的手势从活动手势列表中移除时,需同时判断相应的手势是否触发了start信号,若触发,则发出相应手势的cancel信号。
针对TouchUp事件的处理流程,接上文情景:两指右移60个像素,分别触发了编号19-21手势所对应的start信号,对应的,分别触发了操作A、操作B及操作C,这是设置时希望发生的情景,但是,由于编号19-21都留在了活动手势列表中,在手指抬起的时候,假设两指右移触发trigger信号的最小移动距离设置为20个像素,那么编号19-21的手势的trigger信号都会被触发,为了避免三个信号之间所触发的操作存在干扰,可将其中两个手势的trigger信号所触发的操作为不执行任何操作。
四、手势动作触发
依据初始化的手势识别器触发相应的动作。
1、如果Action收到了Gesture的start信号,且这个动作在配置时,配置的是start阶段执行,那么此时就会执行对应的动作;
2、如果Action收到了Gesture的trigger信号,且这个动作在配置时配置的是在手势trigger阶段才执行,那么此时会执行对应的动作。
五、手势判断过程中的一些技术细节
1、单指滑动手势
单指不涉及Pinch手势,仅涉及滑动Swipe,图8为单指滑动手势识别逻辑图。如图8所示,一个成功的单指滑动手势的识别,需要在距离、角度及方向三个方面均满足要求,阴影部分为有效手势区域。
(1)距离
图8中,r及R分别代表手指滑动要达到的最短距离以及允许手指滑动的最长距离,也即,这个手势仅在滑动距离介于r和R之间时触发,其中,p1和p2分别为滑动的起始点和结束点。
一个成功的手势需满足:
其中,(x1、y1) 及(x2、y2)分别代表起始点和结束点的坐标。
r及R的作用在于:针对活动手势列表中的手势,当手指移动到r时触发该手势的start信号,当手指移动到R时触发该手势的cancel信号,同时将该手势从活动手势列表中移除。
亦或者,手指移动到r时触发相应手势的start信号,未移动到R,但是其容错角度a(下文述)已不满足要求时也触发cancel信号。
(2)容错角度α
允许手势在滑动过程中进行允许范围内的方向偏差。在触摸过程中很难向屏幕的正左正右等方向进行滑动,因此会有一个区间,只要在和正方向的夹角角度小于2/α,就认为是对应的方向。
其中θ代表触摸起始位置和触摸结束位置连线对一个正方向(上下左右)的角度
(3)方向
对于滑动手势需要满足,当前触摸点向且仅向一个方向滑动。
一个单指手势,必须同时满足以上条件,才可以被识别为对应的手势,对于单指长按,仅需满足在一个位置长按超过要求时间即可;而一个单指的滑动,需要同时满足朝向且仅向配置要求的方向移动,且滑动距离在配置要求距离内,才可以被认为手势成功识别。
2、多指手势
多指手势主要是识别多个手指在触摸屏上的捏合和滑动。
多指检测的核心思想是将多指动作抽象为单指动作。我们选择计算多个触摸点的外接矩形,然后跟踪这个外接矩形的几何中心和面积变化:
(1)对于多指Swipe手势,我们将其抽象为几何中心的单指移动;
(2)对于多指Pinch手势,我们将其抽象为外接矩形的面积变化(即对角线长度变化)。下图为五指点击时外接矩形的示意图见图9,其中,d为外接矩形的对角线,c为外接矩形的几何中心,w和h分别为外接矩形的宽和高。
外接矩形对角线的长度d用于多指Pinch方向的判断:对角线长度变短认为当前外接矩形面积变小,发生了手指捏合;对角线长度变长认为当前外接矩形面积变大,发生了手指张开。
外接矩形几何中心c用于判断多指的移动:本发明把多指抽象为单指,位置在多指的几何中心;几何中心位置移动,就认为是多指移动,也就是Swipe操作,几何中心移动的方向,就是Swipe的方向。
一个成功的多指Swipe手势需要:几何中心c的运动满足单指Swipe的要求。
一个成功的多指Pinch手势需要:外接矩形对角线长度 d 变长/变短超过最小识别距离,且过程中方向没有发生改变。
3、防抖
例如,在识别Swipe时,如果d<3,也就是移动距离小于3像素,则认为当前没有发生Swipe,直到连续的事件让当前触摸位置大于起始触摸位置3像素之后,才认为开始Swipe。
本发明的技术效果如下:
1、支持 Swipe、Pinch、LongPress、EdgeSwipe 类型的全局手势,并支持通过配置自定义手势,且实现了对多指动作的执行和识别;
2、 在手势触发时执行用户配置的动作,支持调用命令、调用dbus接口、模拟鼠标、模拟按键等动作,实现了全局手势的支持;
3、手势支持“满足要求就触发”和“满足条件且等触摸动作完成才触发”两种类型;
4、本发明通过复用ukui-kwin原本的输入架构,因此不需要修改XServer(XServer关系到整个***的显示,对***的影响很难评估),解决了ukui-touchegg拦截事件且需要XServer配合修改带来的维护成本过高问题;
5、在X11环境下,本发明从XServer获得事件,获得的是XServer经过映射关系处理的事件,解决ukui-touchegg了在屏幕旋转和多屏场景下频发输入映射异常问题(已有技术从XServer之前的一级中获得事件是未经处理的事件);
6、 本发明不拦截触摸事件,因此应用都可以收到触摸滑动,应用可以自己去实现滚动效果,而非由手势管理器将手势识别为滚轮之后,将滚轮发送给应用,解决了已有的ukui-touchegg方案的滚动交互不好问题(因ukui-touchegg会拦截事件导致应用无法收到触摸实现),ukui-touchegg只能发送滚轮事件,且滚动的状态是周期性跳动的;
7、本发明的方法仅识别全局手势,应用内的手势由应用自己处理,解决了已有的ukui-touchegg的滚动手势和部分应用有冲突问题(因为ukui-touchegg会将所有的触摸事件做拦截并做识别),部分应用对滚轮事件有其他处理而非滚动界面;解决了在部分国产触摸屏上手势识别不准确,且算法性能差,在国产硬件上无法做到快速响应的问题。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (10)
1.全局触摸手势识别方法,其特征在于,包括如下步骤:
步骤S1:初始化手势识别器;
步骤S2:获取手势触摸全局事件;
步骤S3:初始化手势列表,处理手势触摸全局事件,将手势列表中与手势触摸全局事件不相符的手势移除,针对最终剩下的手势发出start信号或trigger信号;其中,start信号表示相应的手势已作出,trigger信号表示相应的手势已完成;
步骤S4:手势识别器接收手势的start信号或trigger信号,并由此根据手势识别器中对应手势的设置触发相应的动作。
2.如权利要求1所述全局触摸手势识别方法,其特征在于,所述步骤S2中,通过ukui-kwin内部的输入模块获得手势触摸全局事件,针对X11环境,通过如下步骤获得手势触摸全局事件:
步骤S21:在ukui-kwin中监听XRawTouchEvent;
步骤S22:将收到的XRawTouchEvent转给ukui-kwin的输入模块;
步骤S23:ukui-kwin的输入模块将事件转发给手势识别模块进行识别。
3.如权利要求1所述全局触摸手势识别方法,其特征在于,所述步骤S2中,通过ukui-kwin内部的输入模块获得手势触摸全局事件,针对Wayland环境,通过如下步骤获得手势触摸全局事件:
步骤S2a:ukui-kwin获得来自libinput的触摸事件;
步骤S2b:将收到的触摸事件转发给ukui-kwin的输入模块;
步骤S2c:ukui-kwin的输入模块将事件转发给手势识别模块。
4.如权利要求1所述全局触摸手势识别方法,其特征在于,所述步骤S3中,所处理的手势触摸全局事件涉及TouchDown、TouchMove和TouchUp事件,分别对应手指按下、手指移动和手指抬起;
在手势触摸全局事件中,所涉及到的手势包括Swipe、Pinch及Long Press,其中,Swipe手势代表手指在屏幕上的平移动作、Pinch手势代表手指在屏幕上的捏合或张开动作,LongPress手势代表手指在屏幕上的长按动作。
5.如权利要求4所述全局触摸手势识别方法,其特征在于,所述步骤S3中,TouchDown事件的处理方法包括:
步骤S31:收到TouchDown事件后重置手势起始时间;
步骤S32:计算此次TouchDown事件中新加入的手指的触摸点id;
步骤S33:将新的触摸点加入触摸点列表中;
步骤S34:计算此次TouchDown事件中涉及到的手指的外接矩形的几何中心;
步骤S35:从手势列表中获得一个手势;
步骤S36:判断所获取的手势是否为Swipe手势,若是,判断该Swipe手势所对应的手指数和起始位置是否与此次TouchDown事件所识别的手指数和起始位置相吻合,如果吻合,则将当前所获取的手势记录为活动手势,并重新执行步骤S35,从手势列表中获取下一个手势;若不是,则执行步骤S37;
步骤S37:判断所获取的手势是否为Pinch手势,若是,判断该Pinch手势所对应的手指数是否与此次TouchDown事件所识别的手指数相吻合,如果吻合,则将当前所获取的手势记录为活动手势,并重新执行步骤S35,从手势列表中获取下一个手势;若不是,则执行步骤S38;
步骤S38:判断所获取的手势是否为LongPress手势,若不是,则重新执行步骤S35,从手势列表中获取下一个手势;若是,判断该LongPress手势所对应的手指数和起始位置是否与此次TouchDown事件所识别的手指数相吻合,如果吻合则开启定时器且在定时器到达阈值时间时触发与LongPress手势相关的start信号,且将当前所获取的手势记录为活动手势,并重新执行步骤S35,从手势列表中获取下一个手势;
循环执行步骤S35-步骤S38,直至遍历完手势列表中的所有手势,得到一个活动手势列表。
6.如权利要求5所述全局触摸手势识别方法,其特征在于,所述步骤S3中,TouchMove事件的处理方法包括:
步骤S3a:收到TouchMove事件后更新当前手指的触摸信息和外接矩形;
步骤S3b:根据外接矩形的面积和几何中心的变化状态来判断TouchMove事件所对应的手势类型是否为一个成功的手势,如果是则执行步骤S3c,如果不是则不做任何处理,继续等待后续事件;
步骤S3c:待手势的移动能够被识别为一个成功的手势后,在第一轮事件处理中进行如下步骤的操作;
步骤S3d:取消定时器计时操作;
步骤S3e:从当前的活动手势列表中获取一个手势;
步骤S3f:判断所获取的手势的类型与步骤S3c中所识别的手势类型是否一致,如果不一致,则将所获取的手势从活动手势列表中移除,并重新从步骤S3e执行,从活动手势列表中获取下一个手势,如果一致,则执行步骤S3g;
步骤S3g:判断所获取的手势的方向与步骤S3c中所识别的手势的方向是否一致,如果不一致,则将所获取的手势从活动手势列表中移除,并重新从步骤S3e执行,从活动手势列表中获取下一个手势,如果一致,则执行步骤S3h;
步骤S3h:判断步骤S3c所识别的手势的移动距离是否满足所获取的手势的最小移动距离要求,若满足,则触发所获取的手势的start信号,并重新从步骤S3e执行,从活动手势列表中获取下一个手势,若不满足,则直接重新从步骤S3e执行,从活动手势列表中获取下一个手势;
循环执行步骤S3e-步骤S3h,直至遍历完活动手势列表中的所有手势。
7.如权利要求6所述全局触摸手势识别方法,其特征在于,所述步骤S3中,TouchMove事件的处理方法中,待手势的移动能够被识别为一个成功的手势后,在第二轮事件及其之后的处理中进行如下步骤的操作;
步骤S3i:从当前的活动手势列表中获取一个手势;
步骤S3j:判断当前已识别到的手势方向、类型、手指数是否和所获得的手势信息一致,若一致,则执行步骤S3k;若不一致,将所获手势从活动手势列表中移除,并获取下一个手势;其中,在将手势从活动手势列表移除前,判断手势是否已触发start信号,若已触发,则针对该手势触发cancel信号;
步骤S3k:判断所获取的手势是否已经触发start信号,若已经触发,则针对所获取的手势触发reach信号,并重新执行步骤S3i,从活动手势列表中获取下一个手势;
若没有触发start信号,则判断步骤当前所识别到的手势的移动距离是否满足当前从活动手势列表中所获取的手势的最小移动距离,若满足,则针对所获取的手势触发start信号,并重新执行步骤S3i,从活动手势列表中获取下一个手势,若不满足,则直接重新执行步骤S3i,从活动手势列表中获取下一个手势;
循环执行步骤S3i至步骤S3k,直至遍历完活动手势列表中的所有手势。
8.如权利要求7所述全局触摸手势识别方法,其特征在于,所述步骤S3中,TouchUp事件的处理方法包括:
步骤S3l:收到TouchUp事件后判断TouchUp事件与TouchDown事件发生时手指的移动距离;
步骤S3m:从活动手势列表中获取一个手势;
步骤S3n:判断所获取的手势是否为Pinch手势;
若所获取的手势是为Pinch手势,则判断当前全局事件中所识别的手势是否为Pinch手势:若是,针对所获取的手势发出trigger信号,并重新执行步骤S3m,从活动手势列表中获取下一个手势;若不是,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;
若所获取的手势不是Pinch手势,则执行步骤S3o;
步骤S3o:判断所获取的手势是否为Swipe手势;
若所获取的手势是为Swipe手势,则判断当前全局事件中所识别的手势是否为Swipe手势:若是,判断所识别的手势是否满足所获取的手势的最小距离要求,若满足,则发出trigger信号,并重新执行步骤S3m,从活动手势列表中获取下一个手势,若不满足,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;若不是,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;
若所获取的手势不是Swipe手势,则执行步骤S3p;
步骤S3p:判断所获取的手势是否为LongPress手势;
若所获取的手势是LongPress手势,则判断该手势的长按时间是否满足要求,若不满足,则将所获取的手势从活动手势列表中移除,并重新执行步骤S3m,从活动手势列表中获取下一个手势;若满足,则触发所获取的手势的trigger信号,并重新执行步骤S3m,从活动手势列表中获取下一个手势;
若所获取的手势不是LongPress手势,则重新执行步骤S3m,从活动手势列表中获取下一个手势;
步骤S3q:循环执行步骤S3m-步骤S3p,直至遍历完活动手势列表中的所有手势。
9.如权利要求6所述全局触摸手势识别方法,其特征在于,在手势触摸全局事件中,手势涉及的手指数目包括单指和多指,单指的Swipe手势的成功识别需满足移动位置在一个最小距离和最大距离的区间内,且在移动过程中,手指所经过的位置在一个容错区间内;
该容错区间的确定方法为:以手指起点做圆心,以最大距离做半径画圆,在该圆内确定一个第一扇形,经过手指移动起点和移动终点的射线能够将第一扇形均分为两个第二扇形,则所确定的第一扇形为容错区间。
10.如权利要求9所述全局触摸手势识别方法,其特征在于,手势涉及的手指数目包括多指时,根据多指的各触摸点确定一个外接矩形,并确定外接矩形的对角线长度和几何中心,根据如下原则判断多指的手势:
如果对角线长度变长,则认为多指发生了Pinch手势,方向为张开;
如果对角线长度变短,则认为多指发生了Pinch手势,方向为捏合;
如果几何中心发生了移动,则认为多指发生了Swipe手势,多指以其相对应的几何中心移动的情况确定Swipe手势是否能够成功识别,其Swipe手势成功识别需满足的条件与单指相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310449386.3A CN116166143B (zh) | 2023-04-25 | 2023-04-25 | 全局触摸手势识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310449386.3A CN116166143B (zh) | 2023-04-25 | 2023-04-25 | 全局触摸手势识别方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116166143A true CN116166143A (zh) | 2023-05-26 |
CN116166143B CN116166143B (zh) | 2023-07-04 |
Family
ID=86420442
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310449386.3A Active CN116166143B (zh) | 2023-04-25 | 2023-04-25 | 全局触摸手势识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116166143B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118227215A (zh) * | 2024-05-10 | 2024-06-21 | 麒麟软件有限公司 | 一种国产平台下的双模式窗口管理器解决方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110181526A1 (en) * | 2010-01-26 | 2011-07-28 | Shaffer Joshua H | Gesture Recognizers with Delegates for Controlling and Modifying Gesture Recognition |
WO2011150607A1 (zh) * | 2010-05-31 | 2011-12-08 | 中兴通讯股份有限公司 | 一种自动识别手势的方法及移动终端 |
CN103823583A (zh) * | 2012-11-16 | 2014-05-28 | 腾讯科技(深圳)有限公司 | 一种多点触摸信息的处理方法及装置 |
CN104246659A (zh) * | 2012-03-31 | 2014-12-24 | 微软公司 | 可实例化的手势对象 |
CN105589698A (zh) * | 2014-10-20 | 2016-05-18 | 阿里巴巴集团控股有限公司 | 一种快速启动***功能的方法和*** |
US9606647B1 (en) * | 2012-07-24 | 2017-03-28 | Palantir Technologies, Inc. | Gesture management system |
US20170115866A1 (en) * | 2015-10-23 | 2017-04-27 | Leauto Intelligent Technology (Beijing) Co. Ltd. | Method, device and terminal apparatus for recognizing multi-finger sliding gesture |
CN110032327A (zh) * | 2019-04-18 | 2019-07-19 | 珠海格力电器股份有限公司 | 基于折叠屏移动终端的手势操作方法及移动终端 |
CN112631499A (zh) * | 2020-12-24 | 2021-04-09 | 广东双泉云创科技有限公司 | 以hook方式实现自定义全局手势技术的方法 |
CN113928080A (zh) * | 2021-09-27 | 2022-01-14 | 浙江零跑科技股份有限公司 | 一种基于全局手势识别的双区车载空调***及操作方法 |
CN114153369A (zh) * | 2021-11-12 | 2022-03-08 | 惠州Tcl移动通信有限公司 | 基于触控板功能的多指手势应用方法、装置、终端及介质 |
-
2023
- 2023-04-25 CN CN202310449386.3A patent/CN116166143B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110181526A1 (en) * | 2010-01-26 | 2011-07-28 | Shaffer Joshua H | Gesture Recognizers with Delegates for Controlling and Modifying Gesture Recognition |
WO2011150607A1 (zh) * | 2010-05-31 | 2011-12-08 | 中兴通讯股份有限公司 | 一种自动识别手势的方法及移动终端 |
CN104246659A (zh) * | 2012-03-31 | 2014-12-24 | 微软公司 | 可实例化的手势对象 |
US9606647B1 (en) * | 2012-07-24 | 2017-03-28 | Palantir Technologies, Inc. | Gesture management system |
CN103823583A (zh) * | 2012-11-16 | 2014-05-28 | 腾讯科技(深圳)有限公司 | 一种多点触摸信息的处理方法及装置 |
CN105589698A (zh) * | 2014-10-20 | 2016-05-18 | 阿里巴巴集团控股有限公司 | 一种快速启动***功能的方法和*** |
US20170115866A1 (en) * | 2015-10-23 | 2017-04-27 | Leauto Intelligent Technology (Beijing) Co. Ltd. | Method, device and terminal apparatus for recognizing multi-finger sliding gesture |
CN110032327A (zh) * | 2019-04-18 | 2019-07-19 | 珠海格力电器股份有限公司 | 基于折叠屏移动终端的手势操作方法及移动终端 |
CN112631499A (zh) * | 2020-12-24 | 2021-04-09 | 广东双泉云创科技有限公司 | 以hook方式实现自定义全局手势技术的方法 |
CN113928080A (zh) * | 2021-09-27 | 2022-01-14 | 浙江零跑科技股份有限公司 | 一种基于全局手势识别的双区车载空调***及操作方法 |
CN114153369A (zh) * | 2021-11-12 | 2022-03-08 | 惠州Tcl移动通信有限公司 | 基于触控板功能的多指手势应用方法、装置、终端及介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118227215A (zh) * | 2024-05-10 | 2024-06-21 | 麒麟软件有限公司 | 一种国产平台下的双模式窗口管理器解决方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116166143B (zh) | 2023-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210365181A1 (en) | Dynamic Command Presentation and Key Configuration for Keyboards | |
US8704791B2 (en) | Augmented I/O for limited form factor user-interfaces | |
US8717323B2 (en) | Determining when a touch is processed as a mouse event | |
US8452057B2 (en) | Projector and projection control method | |
WO2019041779A1 (zh) | 终端界面切换、移动、手势处理的方法、装置及终端 | |
JP2021508881A (ja) | アイコン管理方法及び装置 | |
WO2022048633A1 (zh) | 显示方法、装置和电子设备 | |
KR102323892B1 (ko) | 멀티 터치 가상 마우스 | |
US10656746B2 (en) | Information processing device, information processing method, and program | |
CN104246696A (zh) | 基于图像的应用自动化 | |
CN116166143B (zh) | 全局触摸手势识别方法 | |
WO2024087618A1 (zh) | 一种截屏方法、截屏装置、截屏设备及计算机存储介质 | |
CN103472931A (zh) | 鼠标仿真触控屏幕操作的方法 | |
CN102200876A (zh) | 执行多点触控的方法及其*** | |
JP2022547667A (ja) | ヒューマンコンピュータインタラクション方法、装置、及びシステム | |
CN110543264B (zh) | 基于分屏模式下应用交互的方法、设备和存储介质 | |
WO2022242641A1 (zh) | 任务实现方法、装置和电子设备 | |
JP3183729U (ja) | タッチスクリーン機能を疑似操作できるマウスモジュール | |
JP3861526B2 (ja) | 入力指示装置およびそのプログラム記録媒体 | |
CN113031817B (zh) | 一种多点触控的手势识别方法及防误触方法 | |
CN113535027A (zh) | 图标控制方法、装置、电子设备、可读存储介质 | |
US20160263911A1 (en) | Processing digital ink input subject to monitoring and intervention by an application program | |
TWI780663B (zh) | 互動式觸控系統的操作判斷方法 | |
CN115878010B (zh) | 一种操作交互方法、装置、电子设备和计算可读存储介质 | |
CN112000262B (zh) | 重复用户操作的方法与*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |