"Touch Down"・"move"・ "Touch Up"などがよばれるため
基本的な動作はここで処理することができます
タッチイベントを取得する
"ダブルタップ", "ロングタップ", "フリック"など少し複雑なタッチイベントを処理するには
SimpleOnGestureListenerを使います
複雑なタッチイベントを取得
実際のタッチイベントの取得方法ですが
まずはGestureDetectorを生成します
これはActivity内で構いません
次にonTouchEventを作成しタッチイベントを検出させます
そしてonTouchEventが発生するとGestureDetectorが発生するようにします
最後にあらかじめonGestureListenerを作っておき
onTouchEventが発生するとonGestureListener内で複雑なタッチイベントを検出します
言葉で書くと少し複雑ですがonTouchEventでは複雑なタッチイベントを特定できないため
onGestureListenerで判別するという方法です
実際のプログラムは以下のようになります
それぞれのタッチ動作の後にログを出力するようにしています
MainActivity.java
package blog.test; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.GestureDetector.SimpleOnGestureListener; public class MainActivity extends Activity { private GestureDetector gesDetect; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // GestureDetecotorのインスタンス生成 gesDetect = new GestureDetector(this, onGestureListener); } @Override public boolean onTouchEvent(MotionEvent event) { // タッチイベントが発生するとGestureDetectorが発生 gesDetect.onTouchEvent(event); return false; } // 複雑なタッチイベントを取得 private final SimpleOnGestureListener onGestureListener = new SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { Log.i("tag", "onDoubleTap"); return super.onDoubleTap(e); } @Override public boolean onDoubleTapEvent(MotionEvent e) { Log.i("tag", "onDoubleTapEvent"); return super.onDoubleTapEvent(e); } @Override public boolean onDown(MotionEvent e) { Log.i("tag", "onDown"); return super.onDown(e); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { Log.i("tag", "onFling"); return super.onFling(e1, e2, velocityX, velocityY); } @Override public void onLongPress(MotionEvent e) { Log.i("tag", "onLongPress"); super.onLongPress(e); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.i("tag", "onScroll"); return super.onScroll(e1, e2, distanceX, distanceY); } @Override public void onShowPress(MotionEvent e) { Log.i("tag", "onShowPress"); super.onShowPress(e); } @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.i("tag", "onSingleTapConfirmed"); return super.onSingleTapConfirmed(e); } @Override public boolean onSingleTapUp(MotionEvent e) { Log.i("tag", "onSingleTapUp"); return super.onSingleTapUp(e); } }; }
イベント発生順番
実際に実行してみてログを確認すると次々とログが出力されています
各タッチイベントごとの発生順番は以下の通りとなっています
・シングルタップ
onDown → onShowPress → onSingleTapUp → onSingleTapConfirmed
・ロングタップ
onDown → onShowPress -> onLongPress
・ダブルタップ
onDown → onSingleTapUp → onDoubleTap → onDoubleTapEvent
→ onDown → onDoubleTapEvent
・スクロール
onDown → onScroll * n
・フリック
onDown → onScroll * n → onFling
スポンサードリンク