2025年4月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

« OpenCLでノイズ除去作ってみたが・・・(2) | トップページ | 降格機動隊www »

2014.04.14

[Androidプログラミング] GestureDetectorとScaleGestureDetector

GestureDetectorとScaleGestureDetectorでピンチイン、ピンチアウト、タップや
ダブルタップに対応したときのメモです。

ActivityはOnGestureListener, OnDoubleTapListenerをインプリメントしておいて

GesttureDetectorとScaleGestureDetectorの変数を宣言する。


	protected GestureDetector mDetector; 
	protected ScaleGestureDetector mScaleGestureDetector; 

ActivityのonCreateで


	mDetector = new GestureDetector(this, this); 
	mDetector.setOnDoubleTapListener(this); 
	mScaleGestureDetector = new ScaleGestureDetector(this, this);

と、ジェスチャーを受け取るViewに対して


	View v = (View)findViewById(R.id.View1); 
	v.setOnTouchListener(new View.OnTouchListener() { 
		 
		@Override 
		public boolean onTouch(View v, MotionEvent event) { 
			boolean inProg; 
			 
			inProg = mScaleGestureDetector.isInProgress(); 
			mScaleGestureDetector.onTouchEvent(event); 
			if(inProg || mScaleGestureDetector.isInProgress()) { 
				return true; 
			} 
			 
			return mDetector.onTouchEvent(event); 
		} 
	});

としておく。

ViewのonTouchでは、
まず、今、ピンチイン、ピンチアウト中かを保存しておいて、ScaleGestureDetectorのonTouchEventを呼び出し、ピンチイン、ピンチアウト中に入ったり、呼び出し前にすでに入っている場合は処理したことにして終了する。ピンチイン、ピンチアウト中でなかったらGestureDetectorのonTouchEventを呼び出し、タップやダブルタップなどの認識処理にまわすようにする。

次に正しくタップやダプルタップを取るための各イベントでの処理を示します。

OnGestureListenerのイベント

onDown trueを返さないと次のイベントが正しく発生しないようです。
onFling フリックで発生するイベント。特に返す値は関係なさそう?
ピンチイン、アウトの終了後に発生する場合があるので何らかの対策をするべきかな?
onLongPress ロングタップで発生するイベント
onScroll スクロールで発生するイベント
onShowPress 特に何もしなくていいのかな?
onSingleTapUp シングルタップアップイベント。OnDoubleTapListenerのイベントで認識するので特何もしなくていい。OnDoubleTapListenerを使わない場合はここでタップの処理を行うのかな?

OnDoubleTapListenerのイベント

onDoubleTap ダブルタップのイベント。ここでダブルタップイベントの処理を行う。
onDoubleTapEvent 特に何もしない。実際、ダブルタップを行うとonDoubleTapのあとにonDoubleTapEventが2回来るのでonDoubleTapでダブルタップの処理を行ってこっちでは何もしないのでいいのかな?
onSingleTapConfirmed シングルタップのイベント。タップの処理をここで行う。

OnScaleGestureListenerのイベント

onScale ピンチイン、アウト中に発生する。
onScaleBegin ピンチイン、アウト開始時に発生する。
onScaleEnd ピンチイン、アウト終了時に発生する。

« OpenCLでノイズ除去作ってみたが・・・(2) | トップページ | 降格機動隊www »

Androidプログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Androidプログラミング] GestureDetectorとScaleGestureDetector:

« OpenCLでノイズ除去作ってみたが・・・(2) | トップページ | 降格機動隊www »