2017-03-01 60 views
1

我目前正在嘗試使我的項目,以便當其中一個單選按鈕被選中,並且按鈕被按住時,它會產生選定的聲音。但是當我使用ACTION_DOWN函數時,不會產生噪音。任何幫助將是巨大的單選按鈕的Android操作

public boolean onTouch(View v, MotionEvent event) { 
    int frequency = Integer.parseInt(frequencyInput.getText().toString()); 
    displayFrequency.setText(String.valueOf(frequency)); 
    sineWave.setSine(frequency); 
    squareWave.setSquareWave(frequency); 
    sawWave.setSawWave(frequency); 
    boolean on = ((startStop.isPressed()) && sine.isChecked()); 
    boolean sqOn = ((startStop.isPressed()) && square.isChecked()); 
    boolean sawOn =((startStop.isPressed()) && saw.isChecked()); 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (on) 
      { 
       sineWave.start(); 
      } 
      else if (sqOn) 
       { 
       squareWave.start(); 
       } 

      else if (sawOn) 
        { 
       sawWave.start(); 
      } 
      break; 

     case MotionEvent.ACTION_UP: 
      if (!on) { 
       sineWave.stop(); 
      } 
      if (!sqOn) { 
       squareWave.stop(); 
      } 
      if (!sawOn) { 
       sawWave.stop(); 
       ; 
      } 
      break; 


      } 
+0

我的猜測是,在當'onTouch'獲取調用,'startStop.isPressed()'是'那一刻FALSE' – JohnnyAW

回答

2

主要的問題是,你檢查isPressed()而你還在onTouch,使按鍵的按下狀態還沒有確定呢。

如果您將onTouchListener直接添加到startStop按鈕,您可以確保每次調用它時都會觸發該事件的startStop按鈕。這允許您刪除startStop.isPressed()檢查。

startStop.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      int frequency = Integer.parseInt(frequencyInput.getText().toString()); 
      displayFrequency.setText(String.valueOf(frequency)); 
      sineWave.setSine(frequency); 
      squareWave.setSquareWave(frequency); 
      sawWave.setSawWave(frequency); 
      boolean on = sine.isChecked(); 
      boolean sqOn = square.isChecked(); 
      boolean sawOn = saw.isChecked(); 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        if (on) { 
         sineWave.start(); 
        } else if (sqOn) { 
         squareWave.start(); 
        } else if (sawOn) { 
         sawWave.start(); 
        } 
        break;  
       case MotionEvent.ACTION_UP: 
        if (!on) { 
         sineWave.stop(); 
        } 
        if (!sqOn) { 
         squareWave.stop(); 
        } 
        if (!sawOn) { 
         sawWave.stop(); 
        } 
        break; 
       default: 
        return false; 
      } 
      return true; 
     } 
    }); 
+0

到現在仍然不工作,作爲其主要活動和實現onTouchListener,它需要保持抽象。 – Jackington

+1

這基本上是我的建議的要點:不要在活動中全局實現OnTouchListener,而是直接爲按鈕執行操作。 – Bmuig

+0

如果你真的真的想要實現監聽器到活動中,你可以在xml中的按鈕上設置一個標籤,並在onTouch回調開始時檢查它。 – Bmuig