Androidで長押し(ロングタップ)やダブルタップのイベントを取得するサンプル
2009年 9月 3日 15:13通常Activityでは画面の長押しやダブルタップ(PCで言う所のダブルクリック)を取得することはできませんが、GestureDetectorクラスを使うことで、長押しやダブルタップのイベントを取得できるようになります。GestureDetectorクラスを使うと他にもいろいろなイベントが取得できるようになるので、いろいろと便利だったりします。
ソースとしては次のような感じになります。
以下の例ではActivityにGestureDetector関連のリスナーを直接実装していますが、書き方はいろいろとできますので、匿名クラスを使ったり専用のクラスを実装したりとかでもOKです。自分の好きな方法でやるといいかなと思います。
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
public class TestGesture extends Activity implements
GestureDetector.OnGestureListener, // 長押し(onLongPress)のイベントが取得できます。
GestureDetector.OnDoubleTapListener {// ダブルタップのイベントが取得できます。
/** GestureDetectorを定義する */
private GestureDetector gestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// GestureDetector設定
// このクラス(TestGesture)をリスナーとして設定
this.gestureDetector = new GestureDetector(this, this);
setContentView(R.layout.main);
}
/**
* タッチイベント
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// Activityのタッチイベント中でGestureDetectorのイベントを呼び出す
// 長押しやダブルタップ等はGestureDetector内で判定されて、
// GestureDetectorに登録したリスナー(このクラス)に処理が振り分けられる
// if文で戻り値を判定することで、GestureDetectorで処理した後、
// 通常のonTouchEventをそのまま継続するかどうかを選択できる
if(this.gestureDetector.onTouchEvent(event)) return true;
return super.onTouchEvent(event);
}
/**
* 長押しイベント
*/
@Override
public void onLongPress(MotionEvent e) {
Log.v("INFO", "onLongPress");
}
/**
* ダブルタップイベント
*/
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.v("INFO", "onDoubleTap");
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Log.v("INFO", "onDoubleTapEvent");
return false;
}
@Override
public boolean onDown(MotionEvent arg0) {
Log.v("INFO", "onDown");
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.v("INFO", "onFling");
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.v("INFO", "onScroll");
return false;
}
@Override
public void onShowPress(MotionEvent e) {
Log.v("INFO", "onShowPress");
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.v("INFO", "onSingleTapUp");
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.v("INFO", "onSingleTapConfirmed");
return false;
}
}

2010 年 1 月 5 日 21:09
はじめまして、ちょっと質問させていただきたいます
GestureDetectorを使って、バックグランドのサービスからHOMEキーの長押しイベントを取得できませんでしょうか?
いきなりですが、よろしくお願いいたします。
2010 年 4 月 9 日 00:24
AndroidのMapViewでダブルタップ
通常Activityでは画面の長押しやダブルタップ(PCで言う所のダブルクリック)を取得することはできませんが、GestureDetectorクラスを使うことで、長?…