2014-01-20 86 views
0

在我的Android應用程序中,我有一個佈局,其中有七天的開始和結束按鈕,每個按鈕打開時間選擇器供他選擇他最喜歡的時間。我的需求是必須禁用時間選擇器按鈕的多指觸摸(開始和結束時間按鈕)。我的意思是禁用多指觸摸,即如果同時觸摸打開兩個時間選擇器的兩個按鈕。這是我的佈局結構:在我的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> 

我試圖在每一個TableRowTableLayoutandroid:splitMotionEvents="false",並ScrollView及其子LinearLayout,但它不會禁用多點觸摸的開始和結束時間的按鈕。如何禁用開始和結束時間按鈕的多點觸摸?請協助我。

我試圖還有如下:

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

「必須禁用時間選擇器按鈕的多點觸摸」 - 這是什麼意思?您認爲這些按鈕使用什麼特定的多點觸控手勢? – CommonsWare

+0

我的意思是禁用多指觸摸,即如果同時觸摸兩個打開兩個時間選擇器的按鈕。 –

回答

1

沒有辦法爲你「禁用」這一點,因爲這已無關,與多點觸控。而且,它們不是同時的,而是順序的,因爲兩個單擊事件都通過主應用程序線程進行路由。因此,歡迎您使用您自己的業務邏輯來決定放棄第二次點擊事件,例如:

步驟#1:在您的活動或擁有這些按鈕的片段中有long lastClickTime=0L

步驟#2:在按鈕的點擊處理程序頂部檢查SystemClock.elapsedRealtime()(對於這個答案,我們將它分配給long now局部變量)。如果now-lastClickTime低於某個閾值,則會忽略該點擊事件,因爲在某個其他點擊事件之後它過早。否則,您將lastClickTime設置爲now並執行正常的點擊處理。

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); 
} 

但即使你只是想要停止這樣通過重寫任何一個ViewMultiTouch那麼你可以做它的dispatchTouchEvent()onInterceptTouchEventonTouchEvent()

小記:記得通過MotionEvent.ACTION_POINTER_UP不間斷或您的一些意見將保持按下狀態。

相關問題