Android 事件分发机制

2021-01-11  本文已影响0人  RmondJone

事件的下发

当点击事件产生后会由 Activity 来处理,传递给 PhoneWindow,再传递给DecorView,最后传递给顶层的ViewGroup。

事件的处理

如果处理事件的视图的dispatchTouchEvent方法或者onTouchEvent()方法返回true,则表示事件已被消费,流程中止。如果为false表示事件并未被处理,那么此时就会调用父视图的onTouchEvent()方法,如此反复直到遍历到最顶层的Activity。

QA
如果一个Button放在一个LinearLayout中,这个时候手指从Button上按住然后滑动到外层会不会触发Button的点击事件?

答:不会,因为点击事件最后都会在View的onTouchEvent中触发performClick(),而只有在手指抬起时,走MotionEvent.ACTION_UP里的处理时,才会走到。而这时手指已经不在Button的处理范围中,所以不会走到MotionEvent.ACTION_UP方法里。

事件 简介
ACTION_DOWN 手指 初次接触到屏幕 时触发。
ACTION_MOVE 手指 在屏幕上滑动 时触发,会多次触发。
ACTION_UP 手指 离开屏幕 时触发。
ACTION_CANCEL 事件 被上层拦截 时触发。
ACTION_OUTSIDE 手指 不在控件区域 时触发。
上一篇 下一篇

猜你喜欢

热点阅读