AndroidでACTION_MOVE(タッチ移動)イベントを使う方法|サンプルコード付きで解説
本記事では、Androidアプリでタッチの移動イベント(MotionEvent.ACTION_MOVE)を検知し、指が画面上でドラッグされた際の座標を取得して処理する方法を、サンプルコード付きでわかりやすく解説します。
完成イメージ
画面中央に配置したTextViewを指でスライドすると、移動中の現在位置(X座標・Y座標)がToastメッセージとして画面に表示されるシンプルなデモです。
ステップ1:新規プロジェクトを作成する
まずはAndroid Studioで新しいプロジェクトを作成しましょう。メニューバーから「File」→「New Project」を選択し、必要事項を入力してプロジェクトを作成します。
ステップ2:レイアウトファイル(activity_main.xml)にコードを追加する
res/layout/activity_main.xml に以下のコードを記述してください。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:id="@+id/actionEvent" android:textSize="40sp" android:layout_marginTop="30dp" android:layout_width="wrap_content" android:layout_height="match_parent" /> </LinearLayout>
上記のレイアウトでは、TextViewを1つだけ配置しています。このTextViewに対してタッチリスナーを設定し、移動イベントを受け取る仕組みになります。
ステップ3:MainActivity.javaにコードを追加する
続いて、src/MainActivity.java に以下のコードを記述します。
package com.example.myapplication;
import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView textView;
@SuppressLint({"RestrictedApi", "ClickableViewAccessibility"})
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView actionEvent = findViewById(R.id.actionEvent);
actionEvent.setText("Action Move");
actionEvent.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Toast.makeText(MainActivity.this,"moving: (" + x + "," + y +")",Toast.LENGTH_LONG).show();
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
});
}
}
コードのポイント解説
- setOnTouchListener():TextViewにタッチリスナーを登録し、タッチ操作を監視します。
- event.getX() / event.getY():タッチされた位置のX座標・Y座標をint型で取得します。
- ACTION_DOWN:指が画面に触れた瞬間。ここではLogcatに「touched down」と出力します。
- ACTION_MOVE:指が押されたまま移動している間、継続的に呼び出されます。Toastで現在の座標を表示します。
- ACTION_UP:指が画面から離れた瞬間。Logcatに「touched up」と出力します。
- return true:タッチイベントをこのビューが消費したことを示すため、trueを返すのが重要です。
アプリを実行して確認しよう
それでは実際にアプリを起動してみましょう。実機のAndroidスマートフォンをPCに接続しているものとして説明します。Android Studioでプロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。接続済みのモバイルデバイスを選択すると、端末にデフォルト画面が表示されます。

画面に表示されたテキスト部分を指でドラッグすると、指の移動に合わせて 「moving: (x座標, y座標)」 というToastメッセージが連続的に表示されれば成功です。
まとめ
このように、OnTouchListenerとMotionEventのアクション種別を組み合わせることで、タッチの開始・移動・終了をそれぞれ検知できます。ACTION_MOVEはドラッグ&ドロップや描画アプリなど、インタラクティブなUIを実装する際の基礎となる仕組みなので、ぜひマスターしておきましょう。
-
AndroidのツールバーでSearchViewを実装する方法【ステップ解説】
はじめに 本記事では、Androidアプリのツールバー(Toolbar)にSearchViewを組み込み、リストの絞り込み検索機能を実装する方法を、ステップバイステップで解説します。サンプルとして月名の一覧をListViewに表示し、SearchViewに入力したキーワードでリアルタイムに検索結果をフィルタリングする仕組みを作ります。 手順1:新規プロジェクトの作成 まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:レイアウトファイルの編集 次に、res/lay
-
【Android】XmlPullParserを使ってXMLを解析する方法をステップ別に解説
XmlPullParserとは XmlPullParserは、Androidに標準で組み込まれているXMLパーサーです。イベント駆動型(プル型)の解析方式を採用しており、XMLドキュメントを先頭から順に読み進めながら「開始タグ」「テキスト」「終了タグ」といったイベントを一つずつ処理していきます。DOMのようにドキュメント全体をメモリ上に展開しないため、省メモリかつ高速に動作し、リソースが限られたモバイル環境でのXML解析に最適です。 本記事では、XmlPullParserを使ってユーザー情報が記述されたXMLファイルを解析し、その結果をListViewに表示するサンプルアプリの作成手順を、ステ