2012-09-28 142 views
1

我有一個支持多點觸控的項目。當你觸摸一個按鈕時,它會通過1.但是,它只能獲得第一次觸摸。請幫助我,這是我們的論文。多點觸控問題android

這裏是我的代碼:

public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getActionMasked(); 
    if(action == MotionEvent.ACTION_DOWN){ 

     b1=b2=b3=b4=b5=b6="0"; 

     switch(v.getId()) { 
      case R.id.button3: 
       b3 = "1"; 
       break; 
      case R.id.button2: 
       b2 = "1"; 
       break; 
      case R.id.button1: 
       b1 = "1"; 
       break; 
      case R.id.button4: 
       b4 = "1"; 
       break; 
      case R.id.button5: 
       b5 = "1"; 
       break; 
      case R.id.button6: 
       b6 = "1"; 

     } 
    } else if(action == MotionEvent.ACTION_POINTER_DOWN) 
    { 
     switch(v.getId()) { 
      case R.id.button3: 
       b3 = "1"; 
       break; 
      case R.id.button2: 
       b2 = "1"; 
       break; 
      case R.id.button1: 
       b1 = "1"; 
       break; 
      case R.id.button4: 
       b4 = "1"; 
       break; 
      case R.id.button5: 
       b5 = "1"; 
       break; 
      case R.id.button6: 
       b6 = "1"; 

     } 
    } 
    } 
在這裏

當按鈕1和按鈕2按下它應該通過B1 = 1和B2 = 1但它僅經過B1 = 1。

+0

您是否將此偵聽器附加到所有按鈕上?此外,似乎在代碼中遺漏了return語句。 – sandrstar

回答

2

返回true表示您處理了觸摸事件。

此外,使用字符串(b1b6)作爲布爾值是一個明顯不好的主意。改爲使用boolean

+0

爲了在觸摸監聽器中踢球,請謹慎返回「true」。如果這些視圖是真正的按鈕,則這將覆蓋其被點擊的能力。 – Devunwired

1

觸摸監聽器出現問題(假設所有按鈕都調用了相同的方法)是每次進入方法時都會重置值,並且會爲每個需要處理的事件調用一次。在您觸摸通過同一監聽器的兩個獨特按鈕的示例中,該方法將被調用一次,其中第一個按鈕爲ACTION_DOWN事件,第二次爲您觸摸的第二個按鈕的ACTION_DOWN事件。通過該方法的第二次運行將所有bx輸入的值重置爲零,然後設置與該視圖關聯的值,因此此代碼將始終只保留一個按鈕被「標記」爲已觸摸。

您可能會考慮重置該視圖的ACTION_UPACTION_CANCEL事件上的「標記」狀態,而不是保持更好的全局狀態。我也同意其他海報將這些值存儲爲字符串似乎效率很低,並且會在以後使比較邏輯更加困難。