★60.自定义控件 ★18.事件分发机制详解

简介

  • dispatchTouchEvent()用于管理View的触摸事件:onClick()onLongClick()onTouch()onTouchEvent()
  • View的触摸事件的调用顺序:onTouchListener() > onTouchEvent() > onLongClickListener() > onClickListener()
    ★60.自定义控件 ★18.事件分发机制详解_第1张图片

ViewGroup的事件分发

  • ViewGroup的事件分发相对与View来说就要麻烦一些。
  • ViewGroup中有多个ChildView时,把所有的ChildView遍历一遍,如果触摸点在ChildView区域内就分发给这个ChildView
  • ChildView重叠导致触摸点在多个ChildView里,一般会分配给显示在最上面的ChildView
    ★60.自定义控件 ★18.事件分发机制详解_第2张图片

陷阱

代码


    

解说

  • RelativeLayoutmyClick不会触发,因为View设置为clickable而被消耗了。
  • 不论View自身是否注册点击事件,只要View是可点击的就会消费事件。
  • 事件是否被消费由返回值决定,true表示消费,false表示不消费,与是否使用了事件无关。

注意事项

  • 只要接受ACTION_DOWN就意味着接受所有的事件,拒绝ACTION_DOWN则不会收到后续内容。
  • 如果当前正在处理的事件被上层View拦截,会收到一个ACTION_CANCEL,后续事件不会再传递过来。

你可能感兴趣的:(★60.自定义控件 ★18.事件分发机制详解)