이 튜토리얼에서는 안드로이드 기기에서 터치 이벤트가 발생한 위치(좌표)를 가져오는 방법을 단계별로 알아봅니다. 화면을 터치하면 해당 지점의 X축, Y축 좌표를 실시간으로 화면에 표시하는 간단한 예제 앱을 함께 만들어 보겠습니다.
핵심 원리는 MotionEvent 객체입니다. 뷰(View)에 터치 리스너(OnTouchListener)를 등록하면, 사용자가 터치할 때마다 event.getX()와 event.getY() 메서드를 통해 해당 뷰를 기준으로 한 터치 좌표를 float 값으로 얻을 수 있습니다.
1단계 — 새 프로젝트 생성
Android Studio를 실행하고 File → New Project 메뉴로 이동한 뒤, 빈 액티비티(Empty Activity) 템플릿을 선택하고 프로젝트 이름, 패키지명, 최소 SDK 버전 등 필요한 정보를 입력하여 새 프로젝트를 생성합니다.
2단계 — 레이아웃 작성 (res/layout/activity_main.xml)
메인 레이아웃 파일에 아래 코드를 추가합니다. X축 좌표와 Y축 좌표를 표시할 두 개의 EditText와, 터치 영역 역할을 할 하나의 TextView로 구성되어 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="MainActivity">
<EditText
android:layout_width="400dp"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:hint="Points on X-Axis" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_below="@+id/editText"
android:layout_alignLeft="@+id/editText"
android:layout_alignStart="@+id/editText"
android:hint="Points on Y-Axis"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Touch to get co-ordinates"
android:id="@+id/textview"
android:focusable="true"
android:clickable="true"
android:textSize="20dp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>포인트: TextView에 focusable과 clickable 속성을 true로 설정해야 터치 이벤트를 정상적으로 받을 수 있습니다.
3단계 — 메인 액티비티 작성 (src/MainActivity.java)
이제 핵심 로직인 MainActivity.java 파일입니다. TextView에 OnTouchListener를 등록하고, 터치가 발생하면 MotionEvent에서 X, Y 좌표를 추출하여 각각의 EditText에 출력합니다.
package app.com.sample;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView T;
EditText E1, E2;
float x = 0f;
float y = 0f;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
E1 = (EditText) findViewById(R.id.editText);
E2 = (EditText) findViewById(R.id.editText2);
T=(TextView)findViewById(R.id.textview);
T.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
final float x = event.getX();
final float y = event.getY();
float lastXAxis = x;
float lastYAxis = y;
E1.setText(Float.toString(lastXAxis));
E2.setText(Float.toString(lastYAxis));
return true;
}
});
}
}코드 설명:
event.getX(),event.getY()— 터치가 발생한 뷰를 기준으로 한 상대 좌표를 반환합니다.return true— 터치 이벤트를 소비(consume)했음을 시스템에 알려, 이후 발생하는 MOVE, UP 이벤트도 계속 수신할 수 있게 합니다.- 화면 전체 기준의 절대 좌표가 필요하다면
getRawX(),getRawY()메서드를 사용하면 됩니다.
4단계 — 매니페스트 설정 (androidManifest.xml)
마지막으로 AndroidManifest.xml 파일입니다. 별도의 권한은 필요하지 않으며, 기본 설정 그대로 사용합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 스마트폰을 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run(실행) 아이콘을 클릭하세요. 옵션 목록에서 연결된 모바일 기기를 선택하면, 앱이 기기에 설치되고 아래와 같은 기본 화면이 표시됩니다.

화면 중앙의 텍스트 영역을 손가락으로 터치하면, 터치한 지점의 X축 좌표와 Y축 좌표가 각각의 입력란에 실시간으로 표시됩니다.

전체 프로젝트 코드가 필요하다면 여기를 클릭하여 다운로드하세요.