所有输入事件的类是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)双击

  双击是一种特定动作,在一小段时间和很短的一小段特定距离内敲击两下。双击的计算识别是通过一个双击后处理模块来实现。