[안드로이드] 안드로이드스튜디오(Android Studio) 싱글터치, 멀티터치(multi touch, single touch) 감지하기 디바이스 테스트. , 안드로이드 예제, 안드로이드 강좌
참고 : 이미지서명은 제 와이프 블로그 이미지서명입니다.
안녕하세요 정보처리마법사입니다.
이번 포스팅의 주제는 싱글터치, 멀티터치 감지하는 방법에 관한 내용입니다.
싱글터치일 경우에 화면 상단에 싱글터치 좌표를 표시하고 멀티터치일 경우에는 터치된 두 좌표를 상단에 표시하는 애플리케이션을 만들어 보겠습니다.
일단 실행하면 보이는 화면입니다.
멀티터치를 테스트해야 하므로 디바이스에서 직접 테스트한 화면을 캡쳐하였습니다. 화면 오른쪽 작은 글씨와 터치한 부분 화면에 보이는 것은 테스트를 위해 디바이스에 개발자 디버깅 옵션에서 설정한 것이므로 신경쓰지 않으셔도 됩니다. 싱글 터치를 하면 이런식으로 싱글터치 좌표가 텍스트뷰에 표시됩니다.
그리고 멀티터치를 하면 두 좌표를 텍스트뷰에서 보여줍니다. 살짝 위치가 아래인 것은 레이아웃을 그렇게 한 것이므로 각자의 기호에 맞게 컨트럴의 위치와 크기를 설정하면 됩니다.
자 일단 TextView 두 개를 자신이 원하는 위치에 가져다 놓습니다. Plain TextView, Large Text, Medium Text, Small Text 모두 TextView 인 것은 다들 아시죠? 디자인모드로 TextView를 배치를 하여도 되고 Text모드로 직접 코딩을 하셔도 됩니다.
다른건 별다른 내용은 없지만 TextView 아이디는 기억하시기 바랍니다. 기본으로 사용하셔도 되고 원하는 아이디로 변경하셔도 됩니다. 일단 디자인모드로 드래그를 하면 첫번째 텍스트뷰는 default로 id가 textView이고 그다음부터는 textView2, textView3 ... 이런식으로 붙게 됩니다. RelativeLayout에서는 컨트럴 서로서로 위치가 연관이 되어있기 때문에 Text모드로 변경을 하시면 손이 많이 갑니다. 저는 귀찮아서 그냥 default로 사용하였습니다.
레이아웃의 작성을 마쳤다면 이제 액티비티 상에서 터치 이벤트를 처리할 수 있도록 onTouchEvent()메소드를 작성해야 합니다. 멀티터치가 발생했는지는 MotionEvent 클래스의 getPointerCount()메소드로 알 수 있습니다. 이 메소드의 반환 값이 1이라면 싱글터치이고, 2라면 멀티터치 입니다. 싱글터치일 경우에는 event.getX(0)와 event.getY(0)메소드로 좌표를 알아내면 되고, 멀티터치일 경우에는 event.getX(0)와 event.getY(0) 그리고 event.getX(1), event.getY(1)메소드를 사용해서 알아내면 됩니다.
일단 위 소스코드와 같이 아까 레이아웃의 기억하라고 했던 텍스트뷰들의 아이디를 TextView 객체에 연결하여 줍니다.
그리고 onTouchEvent()메소드를 오버라이딩하여 구현하여 줍니다.
카메라앱이나 이런 멀티터치 관련 애플리케이션은 VM(가상머신)에서 테스트하기가 불가능하거나 까다롭기 때문에 해방전에 고이모셔두었던 베가레이서1을 꺼내어 저렇게 디바이스로 실행을 하면 아까와 같은 실행화면을 얻을 수 있습니다. 아 저 같은 경우는 아이폰이기 때문에 해방전 안드로이드 폰을 꺼내서 테스트했지만 안드로이드폰 유저는 그냥 바로 테스트가 가능합니다.
참고로 iOS, OS X, 등 애플진영 개발을 위한 X-code는 디바이스 테스트가 바로 가능하지 않고 돈을 지불하고 개발자 등록을 해야지만 디바이스 테스트가 가능합니다.(탈옥X)
이상으로 포스팅을 마칩니다. 감사합니다.
참고서적 : 200개의 단계별 예제로 배우는 안드로이드 4.0 [제이펍]
Fin.
잘 못 된 정보가 있으면 말씀해주세요~
공감버튼 클릭은 작성자에게 큰 힘이 됩니다. 행복한 하루 되세요.