在我的Android应用程序中禁用多指触摸

时间:2014-01-20 13:09:18

标签: android android-layout android-button android-sensors

在我的Android应用程序中,我有一个布局,其中有七天的开始和结束按钮,每个按钮打开时间选择器用于选择他最喜欢的时间。我需要禁用多指触摸时间选择按钮(开始和结束时间按钮)。我的意思是禁用多指触摸,即如果同时触摸打开两个时间选择器的两个按钮。这是我的布局结构:

<LinearLayout>
  .......
  <ScrollView>
     <LinearLayout>
         <TableLayout>

            <!--Sunday -->
            <TableRow>
                <Texview/>
                <Button/>  <!-- start time -->
                <Button/>  <!-- endtime -->
            </TableRow>

              ..........                

            <!--Saturday -->
            <TableRow>
                <Texview/>
                <Button/>  <!-- start time -->
                <Button/>  <!-- endtime -->
            </TableRow>      

            .............      

         <TableLayout>
     </LinearLayout>
  </ScrollView>
</LinearLayout>

我在android:splitMotionEvents="false"TableRowTableLayout及其子ScrollView中尝试了LinearLayout,但它并未禁用多点触控和结束时间按钮。如何禁用开始和结束时间按钮的多点触控?请帮助我。

我也尝试了以下内容:

<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />

2 个答案:

答案 0 :(得分:2)

因此,使用CommonsWare回答我在我的应用程序中找到了正确的轨道,这是禁用多点触控的快速入侵。

对于我的应用程序,我在我的应用程序中的任何地方都不需要多头,事实上他们最不受欢迎。因此,在Activity中,通过覆盖dispatchTouchEvent,我们得到Action,如果是MotionEvent.ACTION_POINTER_DOWN,我就不会传递它。这是代码:

@Override
public boolean dispatchTouchEvent(@NonNull MotionEvent ev) {

    return ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN || super.dispatchTouchEvent(ev);
}

但即使您只想禁用一个View MultiTouch,也可以通过覆盖其dispatchTouchEvent()onInterceptTouchEvent或{{{}}来实现此目的。 1}}。

一点点注意事项:请记住不要间断地传递onTouchEvent(),否则您的某些观点将保持按下状态。

答案 1 :(得分:1)

您无法“禁用”此功能,因为这与多点触控无关。此外,它们不是同时的,而是顺序的,因为两个单击事件都通过主应用程序线程路由。因此,欢迎您使用自己的业务逻辑来决定放弃第二次单击事件,例如:

步骤1:在您的活动或片段中有long lastClickTime=0L来托管这些按钮。

步骤2:检查按钮单击处理程序顶部的SystemClock.elapsedRealtime()(对于此答案,我们将其分配给long now局部变量)。如果now-lastClickTime低于某个阈值,则忽略点击事件,因为在其他点击事件发生后,它太快了。否则,您将lastClickTime设置为now并执行常规点击处理。