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

Androidで特定の位置のタッチイベントをシミュレート・検出する方法【コード例付き】

はじめに

このチュートリアルでは、Androidアプリで特定の位置(座標)におけるタッチイベントを扱う方法を解説します。MotionEvent クラスを利用することで、画面上のどこがタップされたのか、その座標(X・Y)とイベントの種類(押下・移動・解放)をプログラム側で取得できるようになります。

実装手順

ステップ1:新規プロジェクトの作成

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

ステップ2:レイアウトファイルの準備

次に、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="4dp"
   tools:context=".MainActivity">
</RelativeLayout>

ステップ3:MainActivity.java の実装

src/MainActivity.java に以下のコードを追加します。ポイントは onTouchEvent() メソッドをオーバーライドし、タッチの各アクション(ACTION_DOWN / ACTION_MOVE / ACTION_UP)ごとに getX()getY() で座標を取得して Toast 表示させている点です。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
   private boolean isTouch = false;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
   @Override
   public boolean onTouchEvent(MotionEvent event) {
      int X = (int) event.getX();
      int Y = (int) event.getY();
      int eventAction = event.getAction();
      switch (eventAction) {
         case MotionEvent.ACTION_DOWN:
            Toast.makeText(this, "ACTION_DOWN "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
            isTouch = true;
         break;
         case MotionEvent.ACTION_MOVE:
            Toast.makeText(this, "MOVE "+"X: "+X+" Y: "+Y,
               Toast.LENGTH_SHORT).show();
         break;
         case MotionEvent.ACTION_UP:
            Toast.makeText(this, "ACTION_UP "+"X: "+X+" Y: "+Y, Toast.LENGTH_SHORT).show();
         break;
      }
      return true;
   }
}

ステップ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:roundIcon="@mipmap/ic_launcher_round"
      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スマートフォンをパソコンに接続しているものとして説明を進めます。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。デバイス選択のダイアログが表示されたら、接続したモバイルデバイスを選択します。すると、端末にアプリの初期画面が表示されます。

画面の任意の場所をタップ・スワイプしてみてください。タッチした位置のX・Y座標とイベントの種類が、以下のようにToastで表示されます。

Androidで特定の位置のタッチイベントをシミュレート・検出する方法【コード例付き】

Androidで特定の位置のタッチイベントをシミュレート・検出する方法【コード例付き】

まとめ

このように onTouchEvent() をオーバーライドすれば、ユーザーが画面のどの位置を操作したかを簡単に検出できます。この仕組みを応用すれば、カスタムジェスチャーの実装や描画アプリ、ゲームのコントロールなど、さまざまなインタラクティブな機能の開発につながります。

  1. AndroidでSearchViewを使ってRecyclerViewをフィルタリングする方法を解説

    この記事では、AndroidアプリにおいてSearchViewを使用してRecyclerViewの表示内容をリアルタイムに絞り込む(フィルタリングする)方法を、実際のコード例とともに段階的に解説します。全体の流れ実装のポイントは以下の通りです。RecyclerViewに表示するデータリストを準備するアダプターにFilterableインターフェースを実装するメニューに配置したSearchViewの入力イベントを受け取り、フィルターを呼び出すステップ1:新規プロジェクトの作成まず、Android Studioで新しいプロジェクトを作成します。「File」→「New Project」を選択し、必要な

  2. 【Android】Googleマップでタッチ操作とその位置を検出する方法

    この記事では、AndroidアプリのGoogleマップ上でタッチ操作やその位置を検出する方法を、具体的なコード例とともにステップごとに解説します。ステップ1:新しいプロジェクトを作成するAndroid Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Google Maps Project」を選択し、必要な情報を入力してプロジェクトを作成してください。ステップ2:レイアウトファイルを編集するres/layout/activity_main.xml に以下のコードを追加します。<?xml version="1.0" encoding=&q