Android事件分发

2019-06-03  本文已影响0人  葫芦娃大战屎壳郎

一些疑问:

主要内容

Activity 事件分发

对于Activity的事件分发比较简单,只要搞清楚dispatchTouchEvent方法的调用关系,如何将事件传递到DecorView


image

View 事件分发

严格的讲View的dispatchTouchEvent不算事件分发,因为View没有子View,只能说是对事件处理流程

View.dispatchTouchEvent(MotionEvent event)

  1. 先调用mOnTouchListener.onTouch方法(如果设置了OnTouchListener)
  2. 如果上面onTouch方法返回true,说明事件被消耗,处理结束,返回true
  3. 如果第一步onTouch方法返回false,或者没有设置OnTouchListener,才会调用onTouchEvent,并返回onTouchEvent的结果

整个View.dispatchTouchEvent就这么简单,下面看下onTouchEvent方法

View.onTouchEvent(MotionEvent event)

onTouchEvent主要处理了OnClickListener和OnLongClickListener

ViewGroup 事件分发

if (actionMasked == MotionEvent.ACTION_DOWN || mFirstTouchTarget != null) {
final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;
if (!disallowIntercept) {
    intercepted = onInterceptTouchEvent(ev);
    ev.setAction(action); // restore action in case it was changed
} else {
    intercepted = false;
}
image
上一篇 下一篇

猜你喜欢

热点阅读