我不是在问如何处理触摸事件,而是幕后发生了什么?如果有多个嵌套的小部件,它们以什么顺序看到事件?开发者对此有控制权吗?理想情况下,我想要有关该主题的文档。
3 回答
GCT1015
TA贡献1827条经验 获得超4个赞
从活动的角度来看:
触摸事件首先传递到Activity.dispatchTouchEvent。在这里您可能会首先抓住它们。
在这里,它们被调度到Window,并在其中遍历View层次结构,以使最后绘制的窗口小部件(在其他窗口小部件之上)有机会首先在View.onTouchEvent中处理触摸。如果某些View在onTouchEvent中返回true,则遍历停止并且其他View不接收触摸事件。
最后,如果没有View消耗触摸,则将其传递给Activity.onTouchEvent。
这就是您的全部控制权。顺理成章的是,您看到的绘制在其他对象之上的东西有机会在触摸下面的事物之前处理触摸事件。
一只甜甜圈
TA贡献1836条经验 获得超5个赞
伪代码:
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;
if (onInterceptTouchEvent(ev) {
consume = onTouchEvent(ev);
} else {
consume = child.dispatchTouchEvent(ev);
}
return consume;
}
ref:Android开发艺术探索
- 3 回答
- 0 关注
- 345 浏览
添加回答
举报
0/150
提交
取消