2017-03-01 6 views
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'가'이다) ('라는 startStop.isPressed지고'지금' – 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 '는 아직도, 그것은 그것의 주요 활동으로 꽤 작업을 수행하고 onTouchListener를 구현 추상적으로 남아 있어야합니다. – Jackington

+1

그것은 기본적으로 내 제안이었습니다. OnTouchListener를 액티비티에 전역 적으로 구현하지 말고 직접 버튼에 대해 수행하십시오. – Bmuig

+0

정말로 정말로 활동에 리스너를 구현하려면 xml의 버튼에 태그를 설정하고 onTouch 콜백 시작 부분에서이를 확인할 수 있습니다. – Bmuig