superDispatchTouchEvent

superDispatchTouchEvent

我试图将文件中的触摸事件添加到当前应用程序(根据在文件中找到的数据来构建新的触摸事件),并且试图理解触发“真实”触摸事件时的调用链。

从我进行的所有搜索中,我发现Activity.dispatchTouchEvent(ev)是我们遇到触摸事件时首先调用的方法,然后将其转发给ViewGroup.dispatchTouchEvent,然后转发给View.dispatchTouchEvent。

我想在Activity.dispatchTouchEvent(ev)之前找到什么,以及如何将事件从硬件转移到此方法。

最佳答案

在Activty中,dispatchTouchEvent方法为:

 public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        onUserInteraction();
    }
    if (getWindow().superDispatchTouchEvent(ev)) {
        return true;
    }
    return onTouchEvent(ev);
}

您必须在自己的 Activity 中调用super.dispatchTouchEvent()方法。

这样你就可以到达这行:getWindow().superDispatchTouchEvent(ev)getWindwow()返回 PhoneWindow 的实例。
PhoneWindow.superDispatchTouchEvent()将调用DecorView的方法
,然后在该方法中,将调用DecorView.dispatchTouchEvent

因此,该事件已传递给 View 。
    //in Class PhoneWindow
 public boolean superDispatchTouchEvent(MotionEvent event) {
      return mDecor.superDispatchTouchEvent(event);
 }


//in class DecorView
public boolean superDispatchTouchEvent(MotionEvent event) {
      return super.dispatchTouchEvent(event);
}

10-08 17:35