两个重叠视图的运动事件/触摸注册
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 处于活动状态。
如何在两个重叠视图上启用多点触控?
当您触摸屏幕时,所有触摸都会进入一个视图。这意味着第二根手指按下不会转到另一个触摸处理程序,但会转到与第一次触摸相同的触摸处理程序。最好的选择是为两个视图编写一个触摸处理程序,然后自己进行命中测试。
我目前正在为 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 处于活动状态。
如何在两个重叠视图上启用多点触控?
当您触摸屏幕时,所有触摸都会进入一个视图。这意味着第二根手指按下不会转到另一个触摸处理程序,但会转到与第一次触摸相同的触摸处理程序。最好的选择是为两个视图编写一个触摸处理程序,然后自己进行命中测试。