2010-07-19 4 views
9

활동에서 모든 터치 이벤트를 감지하여 캡처 한 다음 전달 이벤트를 다른보기로 전달할 수 있습니까? 예를 들어Android에서 터치 이벤트를 감지하는 방법

:

버튼 1 버튼 1 내가/그 터치를 캡처 이벤트를 클릭하고 자동으로 원터치로 기본적으로 버튼이 해당 터치 이벤트를 전달하려는 누르면 버튼 2. /를 눌러 당신이 얻을 클릭이 생성되고 동일한 클릭이 두 번째 버튼으로 자동 전달됩니다.

답변

18

먼저이 API 설명을 볼 걸릴 : 당신은 관찰자 디자인 패턴에 익숙하지 않은 경우

, 여기 링크입니다.


부울 android.app.Activity.dispatchTouchEvent 이후 (MotionEvent EV)

공공 부울 dispatchTouchEvent (MotionEvent의 EV) : 터치 스크린 이벤트를 처리하기 위해 호출 API 레벨 1 . 이 창에 전달되기 전에 터치 스크린 이벤트를 모두 터치 스크린 이벤트를 가로 채기 위해 무시할 수 있습니다. 정상적으로 처리해야하는 터치 이벤트 에 대해이 구현을 호출해야합니다.

매개 변수 ev 터치 스크린 이벤트.

반환 값 boolean이 이벤트가 소비 된 경우 true를 반환합니다.

전체 터치 이벤트를 가로 챌 수 있습니다.

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    // TODO Auto-generated method stub 
    super.dispatchTouchEvent(ev); 
    if(btn1.onTouchEvent(ev)){ 
     return btn2.onTouchEvent(ev); 
    }else{ 
     return false; 
    } 
} 

이 코드는 내가 생각하는 것입니다.

+2

감사합니다. 모든 활동 수준의 일정을 터치합니다. –

3

TouchEvent를 단추 누르기에서 가져 와서 다른 단추를 호출하여 TouchEvent를 전달할 수 있다고 상상해 봅니다. 그러나 나는 안전 할 것이라고 확신하지 못합니다. (안드로이드는 당신에게 폭탄을 던질 수 있습니다)

더 안전한 해결책은 Button을 하위 클래스로 지정하고 Observer 디자인 패턴을 사용하는 것입니다. 각 버튼을 등록하여 서로 다른 버튼의 버튼 누르기를 수신하면 TouchEvent를 모두 안전하게 전달할 수 있습니다. http://en.wikipedia.org/wiki/Observer_pattern

관련 문제