所有输入事件的类是MotionEvent。这个类生成两种事件:Touch触控事件、Non-Touch非触控事件
Motion动作事件的属性:
在Motion动作事件中,有一个字符串作为profile属性,用于说明该事件内都有哪些可用的效果。
Touch事件:
Touch事件的is_touch方法返回的是True,是一种特殊的MotionEvent动作事件。所有的Touch事件,都默认有X和Y的坐标信息,即所有的Touch事件都有pos这一profile属性。
坐标位置:
一旦使用一个带有矩阵变换的控件,就需要处理好Touch事件中的矩阵变换。例如Scatter这样的某些控件,自身会有矩阵变换,这就意味着Touch事件也必须用Scatter矩阵进行处理,这样才能正确地把Touch事件的位置分派给Scatter的子控件。
- 从上层空间到本地空间获取坐标:to_local()
- 从本地空间到上层空间获取坐标:to_parent()
- 从本地空间到窗口空间获取坐标:to_window()
- 从窗口空间到本地空间获取坐标:to_widget()
一定要使用上面方法中的某一种来确保内容坐标系适配正确。以下这段代码里是Scatter的实现:
Touch事件的形状:
Touch事件的形状会反映在shape这一property属性中,目前能用的就是一个ShapeRect:
(1)双击
双击是一种特定动作,在一小段时间和很短的一小段特定距离内敲击两下。双击的计算识别是通过一个双击后处理模块来实现。