サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > AndroidのSimpleOnGestureListenerを使ってジェスチャー(フリック、長押しなど)の処理をするサンプル@trySimpleOnGestureListener00
Google Play AAKAKAxSOFTへ

AndroidのSimpleOnGestureListenerを使ってジェスチャー(フリック、長押しなど)の処理をするサンプル@trySimpleOnGestureListener00

実行ファイル(APK)やサンプル(zip)をダウンロードする
trySimpleOnGestureListener00の実行イメージ

SimpleOnGestureListenerを使ってジェスチャーを検知する。
動的にコントロールを配置してレイアウトを作る
main.xmlは使わない。
動的にGLSurfaceViewをはめ込む。
画面いっぱいにボタンを配置

●大事なところ
 リスナーとしてセットするわけではなく、処理があった場合にコールバック
 されるクラスを作って、処理を通す感じ。
 実体化させたあとonTouchEvent内でGestureDetector::onTouchEventを
 呼び出す必要がある。
 SimpleOnGestureListenerを派生させたクラスか、匿名のクラスを作って
 それの実態を持つ。

●関連項目
 SimpleOnGestureListener
 GestureDetector
 onTouchEvent
 onDoubleTapEvent
 onDown
 onFling
 onLongPress
 onScroll
 onShowPress
 onSingleTapConfirmed
 onSingleTapUp

開発環境
Eclipse IDE バージョン: 3.7 Indigo Service Release 1
ターゲットプラットフォーム: 2.3.3
API レベル: 10

package trial.sample.trysimpleOnGestureListener00;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.SurfaceView;
import android.view.Window;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TrySimpleOnGestureListener00Activity extends Activity {
	
	// これでジェスチャー処理する
	private GestureDetector mGestureDetector;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // タイトルは無し
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        
        // レイアウトを作って設定
        LinearLayout layout = new LinearLayout(this);
        layout.setBackgroundColor(Color.rgb(255, 255, 0));
        layout.setLayoutParams(new LinearLayout.LayoutParams(
        		LinearLayout.LayoutParams.FILL_PARENT,
        		LinearLayout.LayoutParams.FILL_PARENT));
        layout.setOrientation(LinearLayout.VERTICAL);
        this.setContentView(layout);
        
        // テキストボックス表示する
        final TextView text = new TextView(this);
        // テキストサイズを大きめに
        text.setTextSize(45);
        text.setText("確認はLogCatで!ここのジェスチャーも拾えます。");
        layout.addView(text);
        
        // GLSurfaceViewを作る
        final SurfaceView surfaceView = new SurfaceView(this);
        surfaceView.setLayoutParams(new LinearLayout.LayoutParams(
        		LinearLayout.LayoutParams.MATCH_PARENT,
        		LinearLayout.LayoutParams.WRAP_CONTENT));
        surfaceView.setBackgroundColor(Color.CYAN);
        layout.addView(surfaceView);
        
        
        ////////////////////////////////////////////////////////////
        // ジェスチャーをチェックするためのもの
        this.mGestureDetector = new GestureDetector(this, new SimpleOnGestureListenerCust());
    }

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		
		////////////////////////////////////////////////////////////
		// イベントの状態
		switch (event.getAction() & MotionEvent.ACTION_MASK) {
		case MotionEvent.ACTION_DOWN:
			break;
		case MotionEvent.ACTION_MOVE:
			break;
		case MotionEvent.ACTION_UP:
			break;
		case MotionEvent.ACTION_CANCEL:
			break;
		}
		
		// ジェスチャー処理
		// 何かジェスチャーがあった場合はtrueが戻るので
		// その場合は普通のタッチ処理しないとかそういう使い方もできる
		this.mGestureDetector.onTouchEvent(event);
		
		// 通常のタッチ処理
		return super.onTouchEvent(event);
	}
    
    
}


////////////////////////////////////////////////////////////
// 単純なジェスチャー処理をするためのリスナー
class SimpleOnGestureListenerCust extends SimpleOnGestureListener {

	////////////////////////////////////////////////////////////
	// ダブルタップ
	@Override
	public boolean onDoubleTap(MotionEvent e) {
		Log.v("SimpleOnGestureListenerCust", "onDoubleTap");
		return super.onDoubleTap(e);
	}

	////////////////////////////////////////////////////////////
	// ダブルタップ(ダブルタップ中にその他のイベントが起きたとき)
	// ダブルタップ直後に指をそのまま動かした。とか
	@Override
	public boolean onDoubleTapEvent(MotionEvent e) {
		Log.v("SimpleOnGestureListenerCust", "onDoubleTapEvent");
		return super.onDoubleTapEvent(e);
	}

	////////////////////////////////////////////////////////////
	// 指が画面に触れたとき
	@Override
	public boolean onDown(MotionEvent e) {
		Log.v("SimpleOnGestureListenerCust", "onDown");
		return super.onDown(e);
	}

	////////////////////////////////////////////////////////////
	// フリック
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		Log.v("SimpleOnGestureListenerCust", "onFling");
		return super.onFling(e1, e2, velocityX, velocityY);
	}

	////////////////////////////////////////////////////////////
	// 画面を長い間押したときに呼び出される
	@Override
	public void onLongPress(MotionEvent e) {
		Log.v("SimpleOnGestureListenerCust", "onLongPress");
		super.onLongPress(e);
	}

	////////////////////////////////////////////////////////////
	// スクロール(指でスライド)
	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		Log.v("SimpleOnGestureListenerCust", "onScroll");
		return super.onScroll(e1, e2, distanceX, distanceY);
	}

	////////////////////////////////////////////////////////////
	// 画面を押してちょっとしたら呼び出される
	// onLongPressの少し前くらいに呼ばれる
	@Override
	public void onShowPress(MotionEvent e) {
		Log.v("SimpleOnGestureListenerCust", "onShowPress");
		super.onShowPress(e);
	}

	////////////////////////////////////////////////////////////
	// シングルタップ(onSingleTapUpの後に呼ばれる)
	@Override
	public boolean onSingleTapConfirmed(MotionEvent e) {
		Log.v("SimpleOnGestureListenerCust", "onSingleTapConfirmed");
		return super.onSingleTapConfirmed(e);
	}

	////////////////////////////////////////////////////////////
	// シングルタップで指を離したときに呼ばれる
	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		Log.v("SimpleOnGestureListenerCust", "onSingleTapUp");
		return super.onSingleTapUp(e);
	}
	
}
サンプルプロジェクトをダウンロード APKファイルをダウンロード

, , , , , ,

AndroidでOnTouchListenerを使ったタッチ処理サンプル@tryOnTouchListener00 サンプルプログラムにならない小さなコード1

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>