Android-高级 UI-07- 事件-其他机制

81 阅读1分钟

事件的监听机制

//view源码
View.dispatchTouchEvent{
if( ! Listener.onTouch )
this.onTouchEvent
}

image.png

view.setOnTouchListener中的onTouch方法每次都会先于view本身的onTouchEvent调用,且有优先消费权

事件的记忆机制

  • 含义:
    窗口内的某个view消费了事件(onTouchEvent返回true),则后续事件会直接发给此view的onTouchEvent,不会再经过其他view的onTouchEvent
  • 原理:
    路径记忆是用分层记忆实现的。每个viewgroup都是分发的关键节点,其维护- -个TouchTarget链表、记录哪个子view消费该事件。上层只关注其直接子节点。

事件的截获机制

//伪代码
dispatchTouchEvent

if(onInterceptTouchEvent){ 
     return this.onTouchEvent
}else{
     return child.onTouchEvent
}
      

image.png

如果截获ACTION_ DOWN事件(返回true),则事件不会再分发给子view。

  • 两种情况可截获:
  1. ACTION_DOWN事件一定可截获
  2. 非ACTION_DOWN事件,若子类消费了事件,且自身标志位允许截获,则可截获。

事件的分裂机制

  • 含义
    当某个view消费一次事件(ACTION_DOWN)后,后续点击到其旁系view的多指触摸事件将被分裂为单独的事件(ACTION_DOWN),且其旁系view可消费、记忆此单独事件。
  • 注意
    Android 3.0以上默认开启此机制,可在主题中配置activity和window关闭此功能。

总结

1.每个view都可以被监听。
2.每个viewgroup负责记忆。
3.直系节点间可截获。
4.旁系节点间可分裂。