我来说说Android touch 系统的设计哲学

环境

设备:nexus4 ,系统:Android4.4.2,源代码:Android api 19, debug工具: android studio.

目的

分析Android的touch传递机制,为实现各种hack效果(比如继承listview,实现下拉刷新效果)和复杂的交互效果提供理论支撑。

研究对象

activity 、 viewGroup、view的子类。

Android对touch系统的设计哲学

touch事件包括DOWN MOVE UP 三类基本事件,touch系统里面(这里除去ActionBarOverlayLayout类,为了更加简单地说明问题)分为国王和3类公民:

  • 国王:PhoneWindow.DecorView类,从GOD(android系统)接收一切touch事件,分配touch事件给整个王国(app).
  • 一等公民:activity及其子类,始终可以接收来自国王的各种touch事件,然后告诉国王先把touch事件交给二等公民处理,如果二等公民accept了touch事件,他就不再自己处理了,否则他选择自己处理这个touch事件。
  • 二等公民:viewGroup及其子类,负责传递touch事件。第一梯队的二等公民会排队接收DOWN事件,依次将DOWN事件,传递给他的子嗣(还是二等公民),如果子嗣家中有三等公民接收了DOWN事件,排队的二等公民就会各自散去,否则国王会把DOWN事件,挨个传递给排队的二等公民。一旦第一梯队中有二等公民的奴隶(三等公民)接收处理了这个DOWN事件,国王会把接着而来的MOVE UP 事件都交由这个第一梯队的二等公民处理,其他第一梯队的二等公民可以闲着没吊事了,直到下一次国王分配DOWN事件的时候。
  • 三等公民:view及其子类,作为二等公民家里面的奴隶,负责处理来自二等公民touch事件。

note:当然有些体贴奴隶的二等公民,会自己接收处理事件。

touch王国里面各种术语

接收分配事件:dispatchTouchEvent,使用者:国王和三类公民
接收分配事件:superDispatchTouchEvent,使用者:国王 使用场景:一等公民告诉国王先把touch事件交给二等公民处理。
拦截处理事件:onInterceptTouchEvent,使用者:体贴奴隶的二等公民
处理事件:onTouchEvent,使用者:三类公民,一般来说奴隶使用频率是最高的。

底层公民图谱

screenshot

现世的图

screenshot

结束语

谢谢各位看官捧场,touch系统里面的各种小细节就不在这里披露了,如有需要可以私下探讨。若有写的不对的地方,也请各位看官不吝指出。

猜你喜欢

转载自shuimuqinghua77.iteye.com/blog/2077381