2012-09-28 1 views
1

멀티 터치를 지원하는 프로젝트가 있습니다. 버튼에 닿으면 버튼은 1을 통과합니다. 그러나 첫 번째 터치 만 나타납니다. pls 도움이, 그것은 우리의 논문입니다. button1을하고 Button2를 그것이 1 B2 = 1 = 그러나 단지 B1 = 1 전달 B1 전달해야 눌렀을 때 여기멀티 터치 문제 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"; 

     } 
    } 
    } 

:

여기 내 코드이다.

+0

이 수신기를 모든 버튼에 연결 했습니까? 또한 return 문이 코드에서 누락 된 것처럼 보입니다. – sandrstar

답변

2

터치 이벤트를 처리했음을 나타내는 true을 반환하십시오.

또한 문자열 (b1에서 b6까지)을 부울로 사용하는 것은 좋지 않은 아이디어입니다. 대신 boolean을 사용하십시오.

+0

터치 리스너에서의 걷기에만'true '를 반환하는 것을 조심하십시오. 이러한 뷰가 진정한 버튼 인 경우이 기능은 클릭 할 수있는 기능을 무시합니다. – Devunwired

1

터치 리스너의 문제점 (모든 버튼이 동일한 메소드를 호출한다고 가정)은 메소드를 실행할 때마다 값을 재설정하고 onTouch()이 처리해야하는 각 이벤트마다 한 번 호출됩니다. 동일한 수신기를 통과하는 두 개의 고유 단추를 터치하는 예제에서 메서드는 터치 한 첫 번째 단추에 대해 ACTION_DOWN 이벤트와 함께 한 번 호출되고 두 번째 단추에 대한 ACTION_DOWN 이벤트로 두 번째 호출됩니다. 이 메서드를 두 번째 실행하면 해당 뷰와 관련된 값을 설정하기 전에 모든 bx 입력 값을 다시 원래대로 설정하므로이 코드는 항상 하나의 "표시된"버튼을 터치 한 상태로 유지합니다.

더 나은 전체 상태를 유지하기 위해 해당보기의 ACTION_UPACTION_CANCEL 이벤트에서 "표시"상태를 재설정하는 것이 좋습니다. 나는이 값들을 문자열로 저장하는 것이 상당히 비효율적이며 나중에 비교 논리를 더 어렵게 만드는 다른 포스터들도 동의 할 것입니다.