两个重叠视图的运动事件/触摸注册

Motion Event / Touch registration with two overlaying views

我目前正在为 android 编写游戏。我有一个普通的 GLSurfaceView,我在其中渲染我的图形并使用 public boolean onTouchEvent(MotionEvent me) 方法注册触摸输入,例如转动相机。在单独的 class 中,我以编程方式创建了一个包含 HUD 的 FrameLayout。这是用 this.addContentView(FL_HUD, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)) 添加到 GLSurfaceView 之上的。 HUD 包含一个 Image View,它有一个设置为 .setOnTouchListener 的触摸侦听器,它创建了另一个我可以读出的 Motion 事件。

TouchListeners/MotionEvents 都可以工作,所以当我触摸我的图像视图时,它的 TouchListener 被调用,当我触摸屏幕上的其他地方时,主 Activity 的 TouchListener 被调用。但是,当我尝试在触摸屏幕时触摸 Image View 或在触摸屏幕时尝试触摸 ImageView 时,它不起作用,换句话说,一次只有一个 touchListener 处于活动状态。

如何在两个重叠视图上启用多点触控?

当您触摸屏幕时,所有触摸都会进入一个视图。这意味着第二根手指按下不会转到另一个触摸处理程序,但会转到与第一次触摸相同的触摸处理程序。最好的选择是为两个视图编写一个触摸处理程序,然后自己进行命中测试。