Android

[안드로이드] 안드로이드스튜디오(Android Studio) 여러 터치 이벤트 중복 시 처리 순서 및 제어 방법., 안드로이드 예제, 안드로이드 강좌

정보처리마법사 2016. 7. 27. 18:04
반응형

[안드로이드] 안드로이드스튜디오(Android Studio) 여러 터치 이벤트 중복 시 처리 순서 및 제어 방법.,  안드로이드 예제, 안드로이드 강좌

 

참고 : 이미지서명은 제 와이프 블로그 이미지서명입니다. 

 

 

안녕하세요 정보처리마법사입니다.

이번 포스팅의 주제는 터치 이벤트 중복 시 처리 순서 및 제어에 관한 내용입니다.

 

안드로이드의 UI(사용자인터페이스)는 액티비티 위에 다양한 뷰를 올리는 방식으로 구성됩니다. 그러다 보니 이벤트가 중첩이 되어서 처리되는 경우가 있습니다. 이 경우에 해당 이벤트를 전달하고 싶거나 전달하고 싶지 않거나 할때 처리하는 방법을 알아보겠습니다.

액티비티를 작성하고, 여기에 View 클래스를 상속하는 MyView 클래스를 액티비티에 설정하고 액티비티와 MyView에 onTouchEvent() 메소드를 추가해서 터치 이벤트를 받을 수 있게 합니다. 그리고 MyView에 터치리스너로 onTouch() 메소드를 추가합니다. 그리고 각각에 로그를 남기기위한 처리를 해놓고 순서를 알아봅니다.

 

처음 자동으로 생성되는 코드는 위 이미지와 같습니다.

 

 

위 소스코드와 같이 View를 상속받은 MyView 클래스를 추가하고 그 안에 onTouchEvent 메소드를 구현해줍니다. 그리고 순서를 알아볼수 있게 로그를 남기도록 처리를 해 놓았습니다.

onTouch(), onTouchEvent()메소드는 모두 MotionEvent를 인자로 받습니다. 모션이벤트는 사용자의 터치를 감지하느 객체이며, 이 객체의 getAction()메소드를 사용하면 사용자가 화면을 터치했는지(ACTION_DOWN), 터치했다가 뗐는지(ACTION_UP), 터치한 상태에서 이동했는지(ACTION_MOVE)를 알 수 있습니다.

 

 

그리고 메인액티비티를 위 소스코드와 같이 작성해 줍니다. 역시 특별한 내용은 없고 처음이랑 다른 점은 로그를 남겨주는 처리를 하였고 맨 아래줄에 setContentView() 메소드의 매개변수로 아까 만들었던 myView객체를 넘겨줍니다.

 

 

그리고 MainActivity 클래스 안에 onTouchEvent()메소드에도 로그를 남겨주는 처리를 구현해놨습니다.

 

 

어플리케이션을 실행을 하면 화면은 아무것도 출력하지 않습니다. 이벤트의 순서를 알아보는 목적이기 때문에 딱히 화면에 무엇을 표현하는 처리를 하지 않았기 때문입니다. 이번 같은 경우는 Log에 남겨놨지만 화면에 표현하는 걸 원한다면 각자 다른 방식으로 해도 됩니다.

 

 

빈 화면을 터치를 하고나서 logcat을 보면 위 이미지의 드래그한 저 세 줄에 보이듯이 이벤트의 순서를 알 수 있습니다.

OnTouchListener.onTouch

MyView.onTouchEvent

Activity.onTouchEvent

의 순서로 이벤트가 발생한 걸 볼 수 있습니다.

이 이벤트들이 원하든 원하지 않든 무조건 중복돼서 처리된다면 참 난감하겠죠, 그러므로 사용여부를 제어하려면 해당메소드의 반환 값을 조정해주면 됩니다. onTouch(), onTouchEvent() 메소드처럼 이벤트를 처리하는 메소드는 true나 false로 반환할 수 있습니다. (간혹 onClick()메소드처럼 반환 값이 없는 경우도 있습니다.) 반환값이 있다면 "이벤트를 다음으로 전달할 것인지 말 것인지" 처리할 수 있는데 false를 반환하던 값을 true로 고쳐주면 됩니다.

 

그렇게 하면 그 뒤로는 이벤트가 전달되지 않습니다. 예를들어 터치리스너로 등록한 onTouch() 메소드만 실행하고 싶다면 다음과 같이 return false를 return true로 변경해주면 됩니다.

위 소스코드와 같이 onTouch()메소드의 반환값을 false에서 true로 바꿔주고 실행을 해봅니다.

 

 

애플리케이션을 실행하고 logcat을 살펴보면 위 이렇게 onTouch()메소드만 실행된 걸 알 수 있습니다.


 

이상으로 포스팅을 마칩니다. 감사합니다.


 


 

참고서적 : 200개의 단계별 예제로 배우는 안드로이드 4.0 [제이펍]






Fin.


잘 못 된 정보가 있으면 말씀해주세요~


공감버튼 클릭은 작성자에게 큰 힘이 됩니다.  행복한 하루 되세요.

 

반응형