最終更新: moonlight_aska 2011年09月04日(日) 22:00:21履歴
タッチパネルを操作するとタッチイベント(Touch Event)が発生する.
onTouchEventメソッドは, "タッチダウン","移動", "タッチアップ"などのイベントが発生するたびにコールされるので, 基本的な動作はここで処理することができる. (タッチイベントを取得するを参照)
しかし, "ダブルタップ", "ロングタップ", "フリック"など少し複雑なタッチイベントを処理するには, GestureDetector.SimpleOnGestureListenerクラスを使う.
GestureDetector.SimpleOnGestureListenerクラスの代わりに, GestureDetector.OnGestureListenerクラスとGestureDetector.OnDoubleTapListenerクラスを併用して実装することも可能である.
onTouchEventメソッドは, "タッチダウン","移動", "タッチアップ"などのイベントが発生するたびにコールされるので, 基本的な動作はここで処理することができる. (タッチイベントを取得するを参照)
しかし, "ダブルタップ", "ロングタップ", "フリック"など少し複雑なタッチイベントを処理するには, GestureDetector.SimpleOnGestureListenerクラスを使う.
GestureDetector.SimpleOnGestureListenerクラスの代わりに, GestureDetector.OnGestureListenerクラスとGestureDetector.OnDoubleTapListenerクラスを併用して実装することも可能である.
- GestureDetectorクラスのインスタンスを生成する. インスタンスを生成する際に, SimpleOnGestureListenerメソッドを登録する.
- onTouchEventメソッドをオーバーライドし, タッチイベントをGestureDetector#onTouchEventメソッドに渡す.
- SimpleOnGestureListenerクラスのインスタンスを生成する.
- onGestureListenerにおいて, 各イベントを処理するメソッドをオーバーライドする.
package com.moonlight_aska.android.touchevent02;
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 TouchEvent02 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) {
// TODO Auto-generated method stub
// タッチイベントをGestureDetector#onTouchEventメソッドに
gesDetect.onTouchEvent(event);
return false;
}
// 複雑なタッチイベントを取得
private final SimpleOnGestureListener onGestureListener = new SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
// TODO Auto-generated method stub
Log.v("Gesture", "onDoubleTap");
return super.onDoubleTap(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
Log.v("Gesture", "onDoubleTapEvent");
return super.onDoubleTapEvent(e);
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
Log.v("Gesture", "onDown");
return super.onDown(e);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// TODO Auto-generated method stub
Log.v("Gesture", "onFling");
return super.onFling(e1, e2, velocityX, velocityY);
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
Log.v("Gesture", "onLongPress");
super.onLongPress(e);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// TODO Auto-generated method stub
Log.v("Gesture", "onScroll");
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
Log.v("Gesture", "onShowPress");
super.onShowPress(e);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
Log.v("Gesture", "onSingleTapConfirmed");
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
Log.v("Gesture", "onSingleTapUp");
return super.onSingleTapUp(e);
}
};
}
SHARP SH-03Cで試した結果を示す.
m, nは繰り返し回数. また, ()は発生しない場合もある.
onDown -> onShowPress -> onSingleTapUp
-> onDown -> onDoubleTapEvent * n
onDown -> onSingleTapUp -> onDoubleTap -> onDoubleTapEvent
-> onDown -> onDoubleTapEvent * m -> onShowPress -> onDoubleTabEvent * n
m, nは繰り返し回数. また, ()は発生しない場合もある.
- シングルタップ
onDown -> onShowPress -> onSingleTapUp
- ロングタップ
- ダブルタップ
-> onDown -> onDoubleTapEvent * n
onDown -> onSingleTapUp -> onDoubleTap -> onDoubleTapEvent
-> onDown -> onDoubleTapEvent * m -> onShowPress -> onDoubleTabEvent * n
- スクロール
- フリック
コメントをかく