2016-10-02 2 views
0

피아노 앱을 개발 중입니다. 최고는 아니지만 시작일뿐입니다.onTouchListener를 많이 사용하는 것이 맞습니까?

나는 아래의 코드를 사용하여 소리를 재생하고 터치 이벤트로 버튼의 이미지를 변경합니다.

 C4.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 
        // PRESSED 
        if (Sustain == "false") { 

         streamI25 = sp.play(SC4, Volume, Volume, 0, 0, 1); 
         C4.setBackgroundResource(R.drawable.whitekey1cilicked); 
        } 

        else { 

         sp.play(SC4, Volume, Volume, 0, 0, 1); 
         C4.setBackgroundResource(R.drawable.whitekey1cilicked); 
        } 

        // just in case somthings happend 
        final Handler handler2 = new Handler(); 
        handler2.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          //Do something after 100ms 
          C4.setBackgroundResource(R.drawable.whitekey1); 
         } 
        }, keyUpTime); 


        return true; // if you want to handle the touch event 
       case MotionEvent.ACTION_UP: 
        // RELEASED 


        C4.setBackgroundResource(R.drawable.whitekey1); 

        final Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          //Do something after 100ms 
          sp.pause(streamI25); 

         } 
        }, releaseTime); 


        return true; // if you want to handle the touch event 
      } 
      return false; 
     } 
    }); 

맞습니까? 피아노의 모든 단일 키에이 코드를 모두 쓰는 것이 바보가 아닌가요?

OnClick 메서드의 모든 단추에 대해 몇 줄의 코드 만 사용할 수 있지만 onTouch 이벤트가 필요합니다. 72 onTouchListener를 쓰는 것이 맞습니까?

+0

나는 현명한 경험이 많은 사람이 아닙니다. 그러나 이런 방식으로하고 싶다면 개인적으로 피아노 키의 클래스를 만들고 객체로 키를 만들어 배열에 저장합니다. 그렇게하면 필요한 모든 것을 그들에게 줄 수 있고 많은 공간을 절약 할 수 있습니다. 이 정확한 방법을 선택하기 만하면됩니다. – Pixelknight1398

답변

1

implements OnTouchListener으로 확장하는 활동 또는 다른 처리 클래스에 OnTouchListener를 구현하는 것이 좋습니다. 보기에는 메소드에서 분석 한 태그가있을 수 있습니다 (뷰는 매개 변수로 함수 호출에 전달됩니다).

당신은

C4.setTag("C4"); // or by XML 
C4.setOnTouchListener(this); 

다음

class MyActivity extends Activity implements View.OnTouchListener 

및 쓰기 수 있고 onTouch에 대신 C4view을 변경하고 태그를 기반으로 소리를 선택합니다.

1

정확히 동일한 코드를 여러 번 반복하는 것은 항상 나쁜 생각입니다. 한 가지 옵션은이 이벤트 처리 코드가 포함 된 PianoKeyTouchListener와 같은 명명 된 클래스를 만드는 것입니다.

관련 문제