禁用或阻止"活动"中的多点触控

cac*_*ce7 29 android multi-touch

我有几个关于活动的观点,用户想要连续快速触摸,我使用TouchListener和处理捕获这些触摸MotionEvent.ACTION_DOWN.但是,如果用户使用双手,则在用户拉出上一根手指之前,下一个视图很可能会被"触摸".在这种情况下,将MotionEvent.ACTION_MOVE针对第一个视图而不是MotionEvent.ACTION_DOWN第二个视图的期望触发a .

有没有办法解决或阻止这种行为?我已尝试使用MotionEvent.ACTION_UP并删除事件监听器来调度新事件但似乎都不起作用.

Jer*_*mie 68

我发现在整个应用程序中强制单次触摸的最简单方法是使用主题设置它:

<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:windowEnableSplitTouch">false</item>
    <item name="android:splitMotionEvents">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

表现:

  <application
        android:label="@string/app_name"
        android:theme="@style/MyTheme" >
Run Code Online (Sandbox Code Playgroud)

  • 在Android 5.0.1中为我工作. (3认同)
  • 即使在 Android 8 上也能正常工作。 (2认同)

Ore*_*kay 20

如果有人仍在寻找最佳解决方案,请在xml中输入以下代码:

android:splitMotionEvents = false 
Run Code Online (Sandbox Code Playgroud)

  • 它应该放在布局内。 (2认同)

Pij*_*ren 7

我是这样做的:

@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub

    if(event.getPointerCount() > 1) {
        System.out.println("Multitouch detected!");
        return true;
    }
    else
        return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

我认为您可以为任何视图覆盖onTouchEvent.


cac*_*ce7 3

解决这种情况的最佳方法是使用ViewGroup并实现该onInterceptTouchEvent方法来手动路由您认为合适的触摸事件。

这最初是在这里回答的: Android multitouch!黑客攻击任何人?

实现此解决方案的代码(在上述问题答案的评论部分中找到)可以在这里找到: http://pastebin.com/hiE1aTCw