835 views
この記事は最終更新から 1003日 が経過しています。
1. やりたいこと
Androidアプリで
左スワイプ、右スワイプ
を検出したい。
2. やってみる
画面上をスワイプした方向を表示するだけの簡単なアプリを作った。

(1) MainActivity.java #1 OnGestureListener interfaceを実装する。
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.mGestureDetector = new GestureDetector(this, this);
}
(2) MainActivity.java #2 GestureDetectorを生成する。
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.mGestureDetector = new GestureDetector(this, this);
}
(3) MainActivity.java #3 onTouchEventで GestureDetector#onTouchEventを実行する。
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
(4) MainActivity.java #4 onFlingを overrideし、スワイプ検出処理を実装する。
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
final int SWIPE_MAX_OFF_PATH = 100;
final int SWIPE_MIN_DISTANCE = 50;
final int SWIPE_THRESHOLD_VELOCITY = 50;
// e1 : swipe開始時
// e2 : swipe終了時
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// 画面が左にスワイプされた時の処理
this.tv.setText("← LEFT");
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// 画面が右にスワイプされた時の処理
this.tv.setText("→ RIGHT");
return true;
}
return false;
}
(5) MainActivity.java #5 他の overrideが必要なメソッドを書く。
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
3. 付録 : 動作確認済みの全ソースコード
package com.example.testswipe;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
private TextView tv;
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.tv = findViewById(R.id.tv_disp);
this.mGestureDetector = new GestureDetector(this, this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
this.tv.setText("");
return mGestureDetector.onTouchEvent(event);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
final int SWIPE_MAX_OFF_PATH = 100;
final int SWIPE_MIN_DISTANCE = 50;
final int SWIPE_THRESHOLD_VELOCITY = 50;
// e1 : swipe開始時
// e2 : swipe終了時
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// 画面が左にスワイプされた時の処理
this.tv.setText("← LEFT");
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// 画面が右にスワイプされた時の処理
this.tv.setText("→ RIGHT");
return true;
}
return false;
}
///////////////////////////////////////////////////////////////
// 以下、使用しないが、OnGestureListener interfaceの実装時に overrideが必要なメソッド
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
}
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2025-12-14: 1回 2025-12-13: 0回 2025-12-12: 1回 2025-12-11: 1回 2025-12-10: 1回 2025-12-09: 0回 2025-12-08: 1回