返回
感知触屏背后,精妙的事件分发机制解析
Android
2023-11-02 10:13:30
当我手指触摸到手机屏幕后,给我所见即所得的触控体验,它的背后发生了什么?出于对它的好奇,就有了这篇文章。
漫谈事件分发机制
事件分发系统实际上就是一个消息路由器。它监听手机上的各种输入事件,包括触屏、键盘、鼠标,甚至遥控器等,再把这些消息传递给适当的组件。
1. 触控事件的产生
首先我们先了解一下触控事件的产生,先看下图:
当手指触摸屏幕时,屏幕上一个电容传感器产生电荷。手机的芯片检测到电荷变化后,将它转换为坐标数据,再传递给系统。系统接着会判断这些坐标是否位于某个视图上,并以此判断手指落在了哪个视图上。
2. 事件分发过程
当系统知道手指落在了哪个视图上后,就会调用这个视图的onTouchEvent方法,这个方法就是分发事件的入口。
onTouchEvent方法会根据事件类型,调用不同的处理方法。例如,当手指按下屏幕时,它会调用onTouchEvent的ACTION_DOWN方法;当手指移动时,它会调用ACTION_MOVE方法;当手指抬起时,它会调用ACTION_UP方法。
这些处理方法会根据事件类型执行不同的操作。例如,ACTION_DOWN方法会将手指按下的位置作为参数传递给视图,视图可以根据这个位置来判断用户想做什么。
3. 事件分发的去向
视图处理完事件后,会将事件传递给它的父视图。父视图也会调用自己的onTouchEvent方法,并将事件传递给它的父视图。依次类推,直到事件到达顶层的视图。
顶层的视图处理完事件后,事件就会被分发到其他视图。其他视图也会调用自己的onTouchEvent方法,并将事件传递给它的子视图。依次类推,直到事件到达最初的视图。
4. 控件点击事件执行顺序
关于一个控件点击事件执行顺序,一个简单且常见的控件点击事件的处理过程:
- 用户点击按钮,控件接收到点击事件,其onTouchEvent()方法被调用。
- 该控件的onTouchEvent()方法检测该事件类型,如果为ACTION_DOWN事件,则执行相应的代码,比如改变控件的外观。
- 事件向控件的父控件传递,并且父控件的onTouchEvent()方法被调用。
- 父控件的onTouchEvent()方法也检测事件类型,如果为ACTION_DOWN事件,则执行相应的代码,比如改变父控件的外观。
- 事件继续向上传递,直到到达顶层的父控件,如果为Activity,其onTouchEvent()方法被调用。
- 顶层的父控件(Activity)处理完事件,再将其传递给该控件的子控件。
- 子控件接收到事件,其onTouchEvent()方法被调用,并执行相应的代码。
总结
以上就是Android中的事件分发机制原理。希望通过这篇文章,你对事件分发机制有了一定的了解。