Android 的事件分发(2019-03-07)

2019-03-07  本文已影响0人  Guow110

事件分发机制

举个例子:

ViewGroup1----->ViewGroup----->View

E/ViewGroup1: dispatchTouchEvent: viewgroup1----0
E/ViewGroup1: onInterceptTouchEvent: viewgroup1----0
E/ViewGroup: dispatchTouchEvent: viewgroup----
E/ViewGroup: onInterceptTouchEvent: viewgroup----
E/Button1: dispatchTouchEvent: button1----
E/MainActivity: onTouch: button1
E/ViewGroup1: dispatchTouchEvent: viewgroup1----1
E/ViewGroup1: onInterceptTouchEvent: viewgroup1----1
E/ViewGroup: dispatchTouchEvent: viewgroup----
E/ViewGroup: onInterceptTouchEvent: viewgroup----
E/Button1: dispatchTouchEvent: button1----
E/MainActivity: onTouch: button1

说说原理:

一段伪代码开路

public boolean dispatchTouchEvent(MotionEvent ev) {
        boolean consume = false;//事件是否被消费
        if (onInterceptTouchEvent(ev)){//调用onInterceptTouchEvent判断是否拦截事件
            consume = onTouchEvent(ev);//如果拦截则调用自身的onTouchEvent方法
        }else{
            consume = child.dispatchTouchEvent(ev);//不拦截调用子View的dispatchTouchEvent方法
        }
        return consume;//返回值表示事件是否被消费,true事件终止,false调用父View的onTouchEvent方法
    }
//来自于:https://www.jianshu.com/p/238d1b753e64

特别强调

上一篇 下一篇

猜你喜欢

热点阅读