鉴于有一个 ViewGroup 有几个孩子。至于这个 ViewGroup,我想让它为其所有子级管理所有 MotionEvent,这表示 VG 将
1. 能够在所有事件被分派到目标(子级)之前拦截所有事件
2. VG 将首先使用该事件,并确定是否会进一步向目标孩子
3 派发事件。DOWN、MOVE、UP,我希望将它们视为相对独立,这意味着 VG 可以吃 DOWN,但将 MOVE 和 UP 给孩子。
我已经阅读了 SDK 指南“处理 UI 事件”,我知道事件侦听器、处理程序、ViewGroup.onInterceptTouchEvent(MotionEvent) 和 View.onTouchEvent(MotionEvent)。
这是我的样本,
@Override
public boolean onInterceptTouchEvent (MotionEvent event) {
if (MotionEvent.ACTION_DOWN == event.getAction()) {
return true;
}
return super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (MotionEvent.ACTION_DOWN == event.getAction()) {
return true;
}
else {
if (!consumeEvent(event)) {
// TODO: dispatch to target since I didn't want to eat event
//return this.dispatchTouchEvent(event); // infinite loop!!!
}
}
return super.onTouchEvent(event);
}
为了能够吃掉一些事件,当发生DOWN事件时,我必须在上述两种方法中都返回true,因为SDK是这么说的。然后我可以在 onTouchEvent 中看到 MOVE 和 up。但是,就我而言,我不知道如何将事件发送给孩子。
上面的 dispatchTouchEvent 导致了无限循环,这是可以理解的,因为 VG 本身可能是目标。当时我不知道哪个是目标,MotionEvent 没有给出提示,所以 dispatchTouchEvent 完全没用。
有人帮我吗?谢谢。