[안드로이드 게임 개발] 기초 익히기 onTouchEvent
요즘 출시되는 스마트폰은 다 터치 방식이잖아요. 이런 스마트폰 환경에서 게임이나 어플을 만들기 위해서는 터치 입력 처리가 필수적입니다. 터치입력 방식에 대해서 알아보도록 하겠습니다.
안드로이드 프로젝트를 하나 생성하고 View클래스를 상속받은 클래스를 먼저 만들도록 하겠습니다.
■ MainActivity
■ View클래스를 상속받은 클래스를 만들고 화면에 그림을 출력하기 위해서
onDraw()메서드를 오버라이딩 해줍니다.
안드로이드에서 더치 이벤트를 처리하는 방법은 두가지입니다.
1. 콜백 메서드를 이용하는 방법
Boolean onTouchEvent(MotionEvent e)
onTouchEvent()메서드는 View클래스에서 오버라이드 해서 사용할 수 있습니다.
2. 리스너 핸들러를 이용하는 방법
Boolean onTouch(View v, MotionEvent event)
onTouch메서드는 onTouchListener를 등록해서 사용해야 합니다.
두가지 방법중에서 게임처럼 뷰 한개를 이용할때는 onTouchEvent를 오버라이딩 해서 사용하는게 좋습니다. 그리고 나중에 터치 할때 화면의 갱신이 필요할것이므로 invalidate()메서드를 미리 추가해놓겠습니다.
onTouchEvent의 매개변수로 넘오는 MotionEvent에서 터치와 관련된 몇가지 정보를 가져오는데요, 이것들을 이용해서 이벤트를 처리할 수 있습니다. 대표적으로 터치의 좌표와 터치 액션의 종류입니다.
콜백 메서드에서 넘어온 모션이벤트에서 좌표 정보를 가져와 보고, 좌표가 제대로 넘어오는지 확인하기 위해서 화면에 좌표값을 텍스트로 표시하겠습니다.
좌표값을 가져오기 위해서 TouchEvnetView 클래스에 변수를 선언하고 onDraw()메서드를 수정해서 터치 이벤트가 일어난 좌표를 화면에 표시하게 코딩을 했습니다.
그리고 onTouchEvent()에서는 인자로 넘어오는 MotionEvent객체의 getX, getY 메서드를 사용해서 현재 터치가 발생한 부분의좌표를 불러올 수 있습니다.
애플리케이션을 AVD에서 실행하고 화면을 마우스로 터치하면 다음과 같이 좌표값을 구해서 화면에 표시하게 됩니다.
다음으로 터치 액션중에 ACTION_DOWN, ACTION_MOVE, ACTION_UP을 이용해서 액션에 대한 처리를 실감할 수 있는 예제를 만들어보겠습니다.
먼서 어플을 실행하면 기본 아이콘 하나와 그 아이콘의 좌표와 현재 액션에 대한 정보를 화면에 표시하구요. 화면을 누르면(ACTION_DOWN) 아이콘이 손가락(AVD 커서)위치로 이동을 합니다. 누른상태로 손가락을 움직이면 아이콘이 따라 움직이다가(ACTION_MOVE) , 손가락을 떼게 되면(ACTION_UP) 원래의 자리로 되돌아 가게 됩니다.
다음과 같이 화면에 표시할 String변수를 str로 선언을 해놓고 이벤트 발생에 따라서 각각 다른 String이 출력되도록 하겠습니다.
1번은 R.drawable 폴더에 있는 ic_Launcher 아이콘을 비트맵 팩토리를 사용해서 불러오는 과정이구요. 2번은 현재 발생하고 있는 ACTION 이벤트를 화면에 텍스트로 표시하는 내용입니다.
3번은 손가락을 움직이다가 화면에서 손을 뗴었을때 아이콘이 원래 자리로 돌아가게 좌표값을 초기화 시켰습니다. 4번은 ACTION_DOWN을 실행하다가 ACTION_MOVE, ACTION_UP를 받기 위해서
return 값을 true로 해줘야 합니다. AVD에서 실행해봤습니다.