2017-03-01 6 views
1

現在、ラジオボタンの1つが選択され、ボタンが押されているときに選択されたサウンドが生成されるようにプロジェクトを作成しようとしています。ただし、ACTION_DOWN機能を使用した場合、ノイズは発生しません。すべてのヘルプは、主な問題は、あなたがonTouchにまだある間、あなたはisPressed()をチェックするということなので、ボタンの押された状態がまだ設定されていない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'が' ' – JohnnyAW

答えて

2

素晴らしいことです。

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

をは' false'される) 'startStop.isPressed(と呼ば取得された瞬間ではまだそれは、その主な活動としてはかなりではない仕事をして、onTouchListenerを実装していること、です抽象化しておく必要があります。 – Jackington

+1

これは、基本的に私の提案の要点でした。OnTouchListenerをアクティビティにグローバルに実装するのではなく、ボタンのために直接行います。 – Bmuig

+0

本当に本当にリスナーをアクティビティに実装したい場合は、xmlのボタンにタグを設定して、onTouchコールバックの最初にそのタグをチェックできます。 – Bmuig

関連する問題