九、View事件传递机制

  • Post author:
  • Post category:其他




事件传递机制:

责任链机制,从上到下,然后冒泡回到起点

事件传递围绕这三个方法进行

  • dispatchTouchEvent -事件的分发
  • onInterceptTouchEvent – 阻止分发,返回true子view都接受不到事件
  • onTouchEvent -在dispatchTouchEvent使用,用来处理点击事件,返回结果表示是否消费



传递流程

PhoneWindow -> DecorView -> rootview->ViewGroup ->View

ViewGrop 只有自己要拦截掉(onInterceptTouchEvent 返回true),就会走onTouchEvent方法,不然是不会走得

onInterceptTouchEvent 返回false 子View的dispatchTouchEvent 就会被回调

在源码就这样子

public boolean dispatchTouchEvent(MotionEvent ev){
    boolean consume =false;
    if (onInterceptTouchEvent(ev)){
       consume =  onTouchEvent(ev);
    } else {
        consume = child.dispatchTouchEvent(ev)
    }
    return consume;
}



View需要处理事件呢

  1. 是否注册setOnTouchListener
  2. onTouch=false
  3. onTouchEvent √ 是否注册OnClickListener (enable)

按照步骤,一步一步来,都是前置条件



版权声明:本文为Jack_King007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。