画面上にてタッチされた点の座標を取得する最もシンプルな方法を紹介します。
例えばどのようなときに役立つかというと、2つの値をアナログ制御したい場合、シークバー2本でもよいですが、同時に制御できたほうが便利という場合です。この場合はタッチの座標情報を活用して制御したほうが快適なUIになると思います。
ちなみにスマホ用語的には「タッチ」ではなく「タップ」が正しい表現のようですね。
onTouchEventで画面上の座標を取得
画面をタッチした際にActivityクラスのonTouchEventが呼び出されます。
event.getX/Yで座標が取得できるのでそれをTextViewにて表示します。
package com.example.shin.getcoordinates;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tv_x;
private TextView tv_y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_x=findViewById(R.id.textview_x);
tv_y=findViewById(R.id.textview_y);
}
public boolean onTouchEvent(MotionEvent event) {
//X座標の取得
float x_coor = event.getX();
//Y座標の取得
float y_coor = event.getY();
//TextViewに表示
tv_x.setText(String.valueOf(x_coor));
tv_y.setText(String.valueOf(y_coor));
return true;
}
}
生成したアプリで画面をタッチしてみた結果が以下画像です。


ちゃんと取得・表示されました。
MotionEventは、タッチした場合、移動した場合、タッチが終わった(指が画面から離れた)場合なども取得可能なので、switchで処理を分岐さることもできます。
今回の方法は画面領域全体で座標を取得しますが、ある領域(Fragment)内でのみ座標取得をしたい場合は以下記事を参考にしてください。
今回紹介した内容の応用編といった感じです。



コメント