九、View事件传递机制

事件传递机制:

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

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

  • 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)

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

上一篇:某种JavaScript的针对Android的preventDefault


下一篇:超简单Fragment使用dispatchTouchEvent(Activity把分发触摸事件给Fragment)+ 超简单Activity点击空白处关闭软键盘除EditText和发送按钮