我正在尝试将文件中的触摸事件添加到当前应用程序(根据文件中的数据构建新的触摸事件),并且我试图了解“真实”触摸事件时的调用链被触发了。
在我进行的所有搜索中,我发现Activity.dispatchTouchEvent(ev)是我们有触摸事件时调用的第一个方法,然后将其转发到ViewGroup.dispatchTouchEvent,然后转发到View.dispatchTouchEvent。
我想在Activity.dispatchTouchEvent(ev)之前找到所调用的内容,以及如何将事件从HW转移到此方法。
答案 0 :(得分:0)
在Activty中,方法dispatchTouchEvent为:
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
您必须在自己的活动中调用super.dispatchTouchEvent()
方法。
使您可以到达此行:getWindow().superDispatchTouchEvent(ev)
getWindwow()
返回 PhoneWindow 的实例。
PhoneWindow.superDispatchTouchEvent()
将调用DecorView的方法
,并在该方法中调用DecorView.dispatchTouchEvent
。
因此该事件已传递给视图。
//in Class PhoneWindow
public boolean superDispatchTouchEvent(MotionEvent event) {
return mDecor.superDispatchTouchEvent(event);
}
和
//in class DecorView
public boolean superDispatchTouchEvent(MotionEvent event) {
return super.dispatchTouchEvent(event);
}
答案 1 :(得分:0)
也许您想要的是android输入框架的工作方式。以下有关android输入框架架构的博客可能会对您有所帮助。
Android Input Framework Architecture[Part 1] : Introduction to InputReader & InputDispatcher
输入过程可以简单地表示为:
输入硬件------>内核/驱动程序(输入协议)-----> EventHub(framework / base / libs / ui)getevent ------> InputReader ----> inputDispatcher ---->窗口管理器。