Android 事件分发机制

先放两张 大神 的流程说明图,差不多能把分发机制说明白了~

Android 事件分发机制_第1张图片

Android 事件分发机制_第2张图片
Android 事件分发机制_第3张图片

分发流程
Android 的View是树形结构的,事件传递可以说是以 责任链的形式 层层传递的~

Activity -> PhoneWindow -> DecorView -> ViewGroup -> ... -> View
Activity <- PhoneWindow <- DecorView <- ViewGroup <- ... <- View

View 几个事件的调度顺序

 onTouchListener -> onTouchEvent -> onLongClickListener -> onClickListener
  • 单击事件(onClickListener) 需要两个两个事件(ACTIONDOWN 和 ACTIONUP )才能触发,如果先分配给onClick判断,等它判断完,用户手指已经离开屏幕,黄花菜都凉了,定然造成 View 无法响应其他事件,应该最后调用。(最后)
  • 长按事件(onLongClickListener) 同理,也是需要长时间等待才能出结果,肯定不能排到前面,但因为不需要ACTION_UP,应该排在 onClick 前面。(onLongClickListener > onClickListener)
  • View自身处理(onTouchEvent) 提供了一种默认的处理方式,如果用户已经处理好了,也就不需要了,所以应该排在 onTouchListener 后面。(onTouchListener > onTouchEvent)
  • 触摸事件(onTouchListener) 如果用户注册了触摸事件,说明用户要自己处理触摸事件了,这个应该排在最前面。(最前)

你可能感兴趣的:(Android 事件分发机制)