2010/11/28
OnGestureListener の処理順
そういった複雑な動作を捕まえるためには、Activity に OnGestureListener, OnDoubleTapListener というインターフェースを実装してやります。
このとき、どのイベントがどのタイミングで呼ばれるのか調べるために、以下のようなコードを書いてみました。
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector;
import android.view.MotionEvent;
public class Main extends Activity implements OnGestureListener, OnDoubleTapListener {
private GestureDetector gestureDetector;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gestureDetector = new GestureDetector(this, this);
}
@Override
public boolean dispatchTouchEvent(MotionEvent e) {
super.dispatchTouchEvent(e);
gestureDetector.onTouchEvent(e);
return onTouchEvent(e);
}
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.i("test", "onSingleTapConfirmed");
return false;
}
public boolean onDoubleTap(MotionEvent e) {
Log.i("test", "onDoubleTap");
return false;
}
public boolean onDoubleTapEvent(MotionEvent e) {
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("test", "onDoubleTapEvent DOWN");
break;
case MotionEvent.ACTION_MOVE:
Log.i("test", "onDoubleTapEvent MOVE");
break;
case MotionEvent.ACTION_UP:
Log.i("test", "onDoubleTapEvent UP");
break;
default:
Log.i("test", "onDoubleTapEvent OTHER");
break;
}
return false;
}
public boolean onDown(MotionEvent e) {
Log.i("test", "onDown");
return false;
}
public void onShowPress(MotionEvent e) {
Log.i("test", "onShowPress");
}
public boolean onSingleTapUp(MotionEvent e) {
Log.i("test", "onSingleTapUp");
return false;
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
Log.i("test", "onScroll");
return false;
}
public void onLongPress(MotionEvent e) {
Log.i("test", "onLongPress");
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.i("test", "onFling");
return false;
}
}
Xperia (Android 2.1) で試した結果、以下のようになりました。


