Androidプログラミング

【Android】画面タッチ座標の最もシンプルな取得方法【座標取得】

Android

画面上にてタッチされた点の座標を取得する最もシンプルな方法を紹介します。

例えばどのようなときに役立つかというと、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;
    }
}

生成したアプリで画面をタッチしてみた結果が以下画像です。

アプリ動作画面1
操作結果1
アプリ動作画面2
操作結果2

ちゃんと取得・表示されました。

MotionEventは、タッチした場合、移動した場合、タッチが終わった(指が画面から離れた)場合なども取得可能なので、switchで処理を分岐さることもできます。

今回の方法は画面領域全体で座標を取得しますが、ある領域(Fragment)内でのみ座標取得をしたい場合は以下記事を参考にしてください。

今回紹介した内容の応用編といった感じです。

コメント

タイトルとURLをコピーしました