【发布时间】:2011-08-21 09:02:18
【问题描述】:
鉴于有一个 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 完全没用。
有人帮我吗?谢谢。
【问题讨论】:
-
在这种情况下你能帮我吗My Problem,或者Other Question
标签: android event-handling motion