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) で試した結果、以下のようになりました。