【发布时间】:2014-12-08 18:05:49
【问题描述】:
布局
- Container 是一个相对布局,包含两个自定义视图:OuterView1 和 InnerView2
- Outer View1 是自定义视图,匹配父级的大小(全屏)
- Inner View2 也是一个自定义视图,位于 OuterView1 之上,与其重叠。
在 OuterView1 和 InnerView2 上,我想捕获这些触摸事件 onSingleTapConfirmed() 和 onFling()。 OuterView1 和 InnerView2 重叠的区域,我希望将控件传递给两个视图的触摸事件方法。
我试过这个:
容器类
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
outerView1.onTouchEvent(ev);
innerView2.onTouchEvent(ev);
return false;
}
OuterView1 类
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
gesture 是 GestureDetector.SimpleOnGestureListener 的一个实例,带有 onDown()、onFling() 和 onSingleTapConfirmed() 方法的日志语句
InnerView2 类
@Override
public boolean onTouchEvent(MotionEvent event) {
gesture.onTouchEvent(event);
return true;
}
gesture 是 GestureDetector.SimpleOnGestureListener 的一个实例,带有 onDown()、onFling() 和 onSingleTapConfirmed() 方法的日志语句
使用这种方法,我始终在两个视图的 onDown() 方法中获得回调。但我没有看到 onSingleTapConfirmed() 和 onFling() 方法的一致行为
当我点击红圈(在屏幕截图中)三次时,我得到了三种不同的行为
-
第一次尝试(期望的行为)
10-14 09:03:14.155: I/OuterView1(27776): OuterView1.onDown() 10-14 09:03:14.155: I/InnerView2(27776): InnerView2.onDown() 10-14 09:03:14.155: W/GestureDetector(27776): [pen gesture] isConsideredDoubleTap - timeout 10-14 09:03:14.155: I/InnerView2(27776): InnerView2.onDown() 10-14 09:03:14.460: I/OuterView1(27776): OuterView1.onSingleTapConfirmed() 10-14 09:03:14.460: I/InnerView2(27776): InnerView2.onSingleTapConfirmed() -
第二次尝试(只有一个视图获得 onSingleTapConfirmed())
10-14 09:04:11.615: I/OuterView1(27776): OuterView1.onDown() 10-14 09:04:11.615: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:11.615: W/GestureDetector(27776): [pen gesture] isConsideredDoubleTap - timeout 10-14 09:04:11.615: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:11.915: I/OuterView1(27776): OuterView1.onSingleTapConfirmed() -
第三次尝试(一个视图获取 onFling(),另一个获取 onSingleTapConfirmed())
10-14 09:04:04.180: I/OuterView1(27776): OuterView1.onDown() 10-14 09:04:04.180: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:04.180: W/GestureDetector(27776): [pen gesture] isConsideredDoubleTap - timeout 10-14 09:04:04.180: I/InnerView2(27776): InnerView2.onDown() 10-14 09:04:04.255: I/InnerView2(27776): InnerView2.onFling() 10-14 09:04:04.480: I/OuterView1(27776): OuterView1.onSingleTapConfirmed()
您能帮我在 OuterView1 和 InnerView2 上捕获触摸事件吗?
【问题讨论】:
标签: android overlapping touch-event