Android
 Computer >> コンピューター >  >> プログラミング >> Android

【Android】ビューの絶対座標を取得する方法をサンプルコード付きで解説

Androidでビューの絶対座標を取得するには?

本題に入る前に、「絶対座標」とは何かを確認しておきましょう。絶対座標とは、ウィンドウマネージャー上におけるビューの絶対的な位置(x, y)のことです。画面左上を原点として、そこからの距離で表されます。

この記事では、Androidアプリで特定のビューの絶対座標を取得する方法を、実際のサンプルコードとともに段階的に解説していきます。

手順1:新規プロジェクトを作成する

まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。

手順2:レイアウトファイル(activity_main.xml)を編集する

次に、res/layout/activity_main.xml に以下のコードを追加します。

<?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"
    android:padding = "16dp"
    tools:context = ".MainActivity"
    android:background = "#dde4dd">
    <TextView
        android:id = "@+id/text"
        android:layout_marginLeft = "100dp"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "Hello World!" />
</RelativeLayout>

上記のXMLでは、TextViewを1つ配置しています。ユーザーがこのTextViewをタップすると、そのビューの画面上の位置がToastで表示される仕組みです。

手順3:MainActivity.javaを実装する

続いて、src/MainActivity.java に以下のコードを追加します。

package com.example.andy.myapplication;

import android.graphics.Point;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.text);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int[] location = new int[2];
                textView.getLocationOnScreen(location);
                Toast.makeText(MainActivity.this,"X axis is "+location[0] +"and Y axis is "+location[1],Toast.LENGTH_LONG).show();
            }
        });
    }
    public static Point getLocationOnScreen(View view) {
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        return new Point(location[0], location[1]);
    }
}

コードのポイント

上記のコードの核となるのは getLocationOnScreen() メソッドです。引数として渡したint型の長さ2の配列に、結果が格納されます。

  • location[0] … X座標(画面左端からの距離)
  • location[1] … Y座標(画面上端からの距離)

ユーザーがTextViewをタップすると、取得した絶対座標がToastとして画面に表示されます。

なお、補足として類似メソッドとの違いも押さえておくと便利です。getLocationInWindow() を使うとウィンドウ基準の座標を取得でき、getLocationInWindow() と getLocationOnScreen() の違いは、ステータスバーなどのシステム領域を含むかどうかです。用途に応じて使い分けましょう。

アプリを実行して動作を確認する

それでは、アプリを実際に実行してみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続している前提で説明します。

Android Studioでプロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。表示された選択肢から接続中のモバイルデバイスを選ぶと、端末にアプリの初期画面が表示されます。

【Android】ビューの絶対座標を取得する方法をサンプルコード付きで解説

上記の画像がアプリの初期画面です。ここでTextViewをタップすると、以下のようにビューの絶対座標がToastで表示されます。

【Android】ビューの絶対座標を取得する方法をサンプルコード付きで解説

まとめ

Androidでビューの絶対座標を取得するには、getLocationOnScreen() メソッドを使用します。長さ2のint型配列を渡すだけで、X座標とY座標を簡単に取得できるため、ドラッグ&ドロップの実装やカスタムアニメーション、ビュー間の位置関係の判定など、さまざまな場面で活用できます。ぜひ実際のプロジェクトでも試してみてください。

  1. 【Android】エミュレータのIPアドレスを取得して表示する方法を解説

    はじめにこの記事では、Androidアプリから端末(エミュレータ/実機)のIPアドレスを取得し、画面に表示する方法を、実際のサンプルコードとともにステップ形式で解説します。Wi-Fi接続情報を利用したシンプルな実装例なので、Android開発初心者の方にもわかりやすい内容となっています。手順1:新規プロジェクトの作成まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成してください。手順2:レイアウトファイル(activity_main.xml)の編集res/layout/acti

  2. Tkinterキャンバスでオブジェクトの座標を取得する方法を解説

    TkinterのCanvas(キャンバス)ウィジェットは、アプリケーションにGUI機能を提供する強力なツールです。図形の描画やオブジェクトのアニメーション、キャンバス上の既存アイテムの設定などに活用できます。キャンバス上に図形を作成する際は、Canvasアイテムコンストラクタに対して図形のサイズと座標を指定する必要があります。そして、すでに配置したアイテムの座標を後から取得したい場合には、coords(item)メソッドを使用します。このメソッドは、キャンバスウィジェット上の図形の座標をリスト形式で返します。coords()メソッドの基本的な使い方以下のサンプルコードでは、キャンバス上に楕円を