基础06-ViewGroup
dispatchTouchEvent
flowchart TD A[开始] --> B{过滤事件} B -->|true| C{是否ACTION_DOWN} B -->|false| D[返回false] C -->|true| E[清除TouchTargets,重置TouchState] C -->|false| F{111} E --> G[调用onInterceptTouchEvent]@{ shape: comment, label: "计算新事件的x,y,传递给child\n若child空,调用super.dispatchTouchEvent" } G --> J[处理hover事件] J --> F[遍历TouchTarget,调用dispatchTransformedTouchEvent传递event] F --> H[如果是up/cancel,重置TouchState] H --> I[返回是否handle]
过滤事件
- 如果this存在flag:
FILTER_TOUCHES_WHEN_OBSCURED
,event存在flag:FLAG_WINDOW_IS_OBSCURED
,就丢掉 - window被上面的window遮住了,不管这个时间了
1 | public void setFilterTouchesWhenObscured(boolean enabled) { |
调用view的这个函数,就会设置这个flag