15
ANDROID HACKS #21 ジジジジジジジジ ジジtsuruoka 22/08/26 1

Android Hacks - Hack21

Embed Size (px)

DESCRIPTION

「Android Hacks ―プロが教えるテクニック & ツール」(株式会社ブリリアントサービス 著)を教材とした勉強会でのまとめ資料です。http://www.oreilly.co.jp/books/9784873114569/

Citation preview

Page 1: Android Hacks - Hack21

ANDROIDHACKS#21 ジェスチャを使う

担当: tsuruoka

23/04/12

1

Page 2: Android Hacks - Hack21

この資料について• この資料は下記の本をベースに勉強会で作成した資料です。

• 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)

• この本の紹介ページが下記にあります。

• http://www.oreilly.co.jp/books/9784873114569/

23/04/12

2

Page 3: Android Hacks - Hack21

アジェンダ• Hack21 ジェスチャを使う

• 定義されているジェスチャ• 長押し、 Fling など

• 登録したジェスチャ• 登録された軌跡との類似度で認識

23/04/12

3

Page 4: Android Hacks - Hack21

Hack21. ジェスチャとは• 2種類のジェスチャがあります

• 定義されているジェスチャ• 短押し、シングルタップ、 Fling (さっと払う動き)等

いくつかの操作を” ジェスチャー”として解釈・認識するもの• 登録したジェスチャ

• 画面上をなぞる操作に対して登録済みの軌跡との類似度が一定以上のとき、その軌跡が入力されたと認識するもの

23/04/12

4

Page 5: Android Hacks - Hack21

Hack21.定義されているジェスチャ

• GestureDetectorが Motion Eventを逐次ジェスチャとして解釈します

• 解釈とは、下記6つの OnGestureListener のメソッドに当てはめること• OnGestureListener のメソッド

• onDown

• 最初に押したとき呼び出される(ジェスチャはいつもここからはじまる)• onFling

• さっと振り払う操作が行われた場合呼び出される• onLongPress

• 同じ場所を押しつづけた時に呼び出される• これが呼び出された後は指を離さない限りジェスチャとしては認識されない

• onScroll

• 指を動かしている間中、これが連続して呼び出される• onShowPress

• ちょっと押したとき呼び出される。 onLongPress の前に必ず呼び出される。• onSingleTapUp

• とんっと1回タップした動きに対して呼び出される

23/04/125

Page 6: Android Hacks - Hack21

Hack21定義されているジェスチャの実装• ジェスチャを取りたい Activity に implements onGestureListener

• フィールド

• GestureDetector gestureScanner• onCreate

• gestureScanner = new GestureDetector(this)• Public boolean onTouchEvent(MotionEvent me)

・・・・・・

return gestureScannner.onTouchEvent(me)

Page 7: Android Hacks - Hack21

Hack21定義されているジェスチャー解釈例解釈の実行例

( onTouchEvent と6つのメソッドそれぞれに logcat 出力させた)

02-11 17:04:11.792: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:11.792: DEBUG/mydbg(18605): onDown

02-11 17:04:11.792: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:11.825: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:11.852: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:11.852: DEBUG/mydbg(18605): onScroll

02-11 17:04:11.882: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:11.882: DEBUG/mydbg(18605): onScroll

02-11 17:04:11.912: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:11.912: DEBUG/mydbg(18605): onScroll

02-11 17:04:11.933: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:12.272: DEBUG/mydbg(18605): onScroll

02-11 17:04:12.302: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:12.302: DEBUG/mydbg(18605): onScroll

02-11 17:04:12.332: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:12.332: DEBUG/mydbg(18605): onScroll

02-11 17:04:12.352: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:12.352: DEBUG/mydbg(18605): onScroll

02-11 17:04:12.385: DEBUG/mydbg(18605): onTouchEvent

02-11 17:04:12.385: DEBUG/mydbg(18605): onScroll

02-11 17:04:12.385: DEBUG/mydbg(18605): onTouchEvent

Page 8: Android Hacks - Hack21

Hack21 定義されているジェスチャ 解釈例はじくような操作 (Fling)

02-11 17:45:47.852: DEBUG/mydbg(21436): onDown

02-11 17:45:47.952: DEBUG/mydbg(21436): onShowPress

02-11 17:45:48.242: DEBUG/mydbg(21436): onScroll

02-11 17:45:48.432: DEBUG/mydbg(21436): onScroll

02-11 17:45:48.442: DEBUG/mydbg(21436): onFling

Page 9: Android Hacks - Hack21

Hack21 定義されているジェスチャ解釈例

短いタップ02-11 17:47:02.322: DEBUG/mydbg(21436): onDown

02-11 17:47:02.422: DEBUG/mydbg(21436): onShowPress

02-11 17:47:02.652: DEBUG/mydbg(21436): onSingleTapUp

とか02-11 17:47:05.542: DEBUG/mydbg(21436): onDown

02-11 17:47:05.612: DEBUG/mydbg(21436): onSingleTapUp

Page 10: Android Hacks - Hack21

Hack21 定義されているジェスチャ解釈例2

長押を検出したいとき02-11 17:10:14.032: DEBUG/mydbg(18916): onDown

02-11 17:10:14.133: DEBUG/mydbg(18916): onShowPress

02-11 17:10:14.632: DEBUG/mydbg(18916): onLongPress

のようにイベントが検出されます。

onLongPress 後は gesture として解釈されません。つまり長押あとに動かしても onScroll を取ることができない

Page 11: Android Hacks - Hack21

Hack21登録されたジェスチャ• 自分の好きな図形を登録し、それとの類似度で

そのジェスチャが行われたかを判断できます

• ジェスチャの登録は

android-sdk-windows\platforms\android4\samples\GestureBuilder

を自分でビルドして そこから登録すれば良い• 登録されたジェスチャがファイルとして出力される• それを自分のアプリに組み込んで利用できる

• GestureBuilder で登録したジェスチャはgestures ファイルとして SD card のルートに吐き出されます

• プロジェクト内の Res/raw/gestures  に   gestures ファイルを置くなどして利用

Page 12: Android Hacks - Hack21

Hack21登録されたジェスチャ

Ges tureBuilder で登録しました

ジェスチャには名前をつけることができます。

(なぜか)

2画以上のジェスチャも登録できます。

Page 13: Android Hacks - Hack21

Hack21登録されたジェスチャの実装• ジェスチャを取り込む専用の View を使います

• <android.gesture.GestureOverlayView>• フィールド

• Private GestureLibrary mLibrary• onCreate

• mLibrary = GestureLibraries.fromRawResource(this,R.raw.gestures);

• gestures はジェスチャを登録したファイル名• GestureOverlayview gestures =

(GestureOverlayView)findViewById(R.id.XXX)• XXX は GestureOverlayView の id

• Gestures.addOnGesturePerformedListener(this)

Page 14: Android Hacks - Hack21

Hack21登録されたジェスチャの実装 public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {

Log.d("mydgb", "onGesturePerformed");

ArrayList<Prediction> predictions = mLibrary.recognize(gesture);

// We want at least one prediction

if (predictions.size() > 0) {

Prediction prediction = predictions.get(0);

// We want at least some confidence in the result

if (prediction.score > 1.0) {

// Show the spell

Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show();

}

}else{

Toast.makeText(this, "Such gesture isn't registered.", Toast.LENGTH_SHORT).show();

}

}

Page 15: Android Hacks - Hack21

Hack21  ジェスチャまとめAndroidHacks にもありますが

定義されているジェスチャ・登録型ジェスチャはそれぞれ一長一短。