View,ViewGroup,Activity三者的OnTouchEvent事件分发

首先确定有三种,由内向外依次为:

1、View自己的onTouchEvent

2、ViewGroup的onTouchEvent,由于要管理它的子View的onTouchEvent,所以多了个onInterceptTouchEvent(鼓励重载这个而不是dispatchTouchEvent,因为后者是对ViewGroup共性的提取,前者才是针对个例)

3、Activity的onTouchEvent

三者都是先处理setOnTouchEvent的onTouch事件,返回true表示不想下传递,就不进入到onTouchEvent中了

先说ViewGroup的onInterceptTouchEvent,两种情况:

    ①、返回值为True,代表拦截这次事件,直接进入到ViewGroup的onTouchEvent中,就不会进入到View的onTouchEvent了

    ②、返回值为False,代表不拦截这次事件,不进入到ViewGroup的onTouchEvent中,直接进入到View的onTouchEvent中

再说三者的onTouchEvent:

   ①、View的onTouchEvent返回为false表示view处理完onTouchEvent后不消费这次事件,那么这个事件就会继续传递到他的上一层ViewGroup的onTouchEvent事件中,返回true的话就传递完毕,进入不到ViewGroup的onTouchEvent中了

  ②、ViewGrop的onTouchEvent返回为false表示这个ViewGroup处理完onTouchEvent后不消费这次事件,这个事件就会继续传递到activity的onTouchEvent中,返回为true的话就传递完毕,进入不到activity的onTouchEvent中了

  ③、activity的onTouchEvent,同上

总之,如果最里层的返回false就会交给他的上一层处理,否则就会消费这次事件,停止传递,over!

猜你喜欢

转载自blog.csdn.net/u013110200/article/details/78498418