我试图将文件中的触摸事件添加到当前应用程序(根据在文件中找到的数据来构建新的触摸事件),并且试图理解触发“真实”触摸事件时的调用链。
从我进行的所有搜索中,我发现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);
}