狠狠撸

狠狠撸Share a Scribd company logo
ANDROID HACKS #21  ジェスチャを使う 担当: tsuruoka 09/19/11
この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
アジェンダ Hack21  ジェスチャを使う 定義されているジェスチャ 長押し、 Fling など 登録したジェスチャ 登録された軌跡との類似度で認識 09/19/11
Hack21.  ジェスチャとは 2種類のジェスチャがあります 定義されているジェスチャ 短押し、シングルタップ、 Fling (さっと払う動き)等 いくつかの操作を”ジェスチャー”として解釈?認識するもの 登録したジェスチャ 画面上をなぞる操作に対して登録済みの軌跡との類似度が 一定以上のとき、その軌跡が入力されたと認識するもの 09/19/11
Hack21. 定義されているジェスチャ GestureDetectorが Motion Eventを逐次ジェスチャとして解釈します 解釈とは、下記6つの OnGestureListener のメソッドに当てはめること OnGestureListener のメソッド onDown 最初に押したとき呼び出される(ジェスチャはいつもここからはじまる) onFling さっと振り払う操作が行われた場合呼び出される onLongPress 同じ場所を押しつづけた時に呼び出される これが呼び出された後は指を離さない限りジェスチャとしては認識されない onScroll 指を動かしている間中、これが連続して呼び出される onShowPress ちょっと押したとき呼び出される。 onLongPress の前に必ず呼び出される。 onSingleTapUp とんっと1回タップした動きに対して呼び出される 09/19/11
Hack21 定義されているジェスチャの実装 ジェスチャを取りたい Activity に  implements onGestureListener フィールド GestureDetector gestureScanner onCreate gestureScanner = new GestureDetector(this) Public boolean onTouchEvent(MotionEvent me) { ?????? return gestureScannner.onTouchEvent(me)  }
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
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
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
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 を取ることができない。
Hack21 登録されたジェスチャ 自分の好きな図形を登録し、それとの類似度で そのジェスチャが行われたかを判断できます ジェスチャの登録は   android-sdk-windowslatformsndroid4amplesestureBuilder を自分でビルドして そこから登録すれば良い 登録されたジェスチャがファイルとして出力される それを自分のアプリに組み込んで利用できる GestureBuilder で登録したジェスチャは gestures ファイルとして SD card のルートに吐き出されます プロジェクト内の Res/raw/gestures  に    gestures ファイルを置くなどして利用
Hack21 登録されたジェスチャ Ges tureBuilder で登録しました ジェスチャには名前をつけることができます。 (なぜか) 2画以上のジェスチャも登録できます。
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)
Hack21 登録されたジェスチャの実装 public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { Log. d (&quot;mydgb&quot;, &quot;onGesturePerformed&quot;); 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, &quot;Such gesture isn't registered.&quot;, Toast. LENGTH_SHORT ).show(); } }
Hack21  ジェスチャまとめ AndroidHacks にもありますが 定義されているジェスチャ?登録型ジェスチャはそれぞれ一長一短。

More Related Content

Android Hacks - Hack21

  • 1. ANDROID HACKS #21 ジェスチャを使う 担当: tsuruoka 09/19/11
  • 2. この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
  • 3. アジェンダ Hack21 ジェスチャを使う 定義されているジェスチャ 長押し、 Fling など 登録したジェスチャ 登録された軌跡との類似度で認識 09/19/11
  • 4. Hack21. ジェスチャとは 2種類のジェスチャがあります 定義されているジェスチャ 短押し、シングルタップ、 Fling (さっと払う動き)等 いくつかの操作を”ジェスチャー”として解釈?認識するもの 登録したジェスチャ 画面上をなぞる操作に対して登録済みの軌跡との類似度が 一定以上のとき、その軌跡が入力されたと認識するもの 09/19/11
  • 5. Hack21. 定義されているジェスチャ GestureDetectorが Motion Eventを逐次ジェスチャとして解釈します 解釈とは、下記6つの OnGestureListener のメソッドに当てはめること OnGestureListener のメソッド onDown 最初に押したとき呼び出される(ジェスチャはいつもここからはじまる) onFling さっと振り払う操作が行われた場合呼び出される onLongPress 同じ場所を押しつづけた時に呼び出される これが呼び出された後は指を離さない限りジェスチャとしては認識されない onScroll 指を動かしている間中、これが連続して呼び出される onShowPress ちょっと押したとき呼び出される。 onLongPress の前に必ず呼び出される。 onSingleTapUp とんっと1回タップした動きに対して呼び出される 09/19/11
  • 6. Hack21 定義されているジェスチャの実装 ジェスチャを取りたい Activity に implements onGestureListener フィールド GestureDetector gestureScanner onCreate gestureScanner = new GestureDetector(this) Public boolean onTouchEvent(MotionEvent me) { ?????? return gestureScannner.onTouchEvent(me) }
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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 を取ることができない。
  • 11. Hack21 登録されたジェスチャ 自分の好きな図形を登録し、それとの類似度で そのジェスチャが行われたかを判断できます ジェスチャの登録は   android-sdk-windowslatformsndroid4amplesestureBuilder を自分でビルドして そこから登録すれば良い 登録されたジェスチャがファイルとして出力される それを自分のアプリに組み込んで利用できる GestureBuilder で登録したジェスチャは gestures ファイルとして SD card のルートに吐き出されます プロジェクト内の Res/raw/gestures  に    gestures ファイルを置くなどして利用
  • 12. Hack21 登録されたジェスチャ Ges tureBuilder で登録しました ジェスチャには名前をつけることができます。 (なぜか) 2画以上のジェスチャも登録できます。
  • 13. 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)
  • 14. Hack21 登録されたジェスチャの実装 public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { Log. d (&quot;mydgb&quot;, &quot;onGesturePerformed&quot;); 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, &quot;Such gesture isn't registered.&quot;, Toast. LENGTH_SHORT ).show(); } }
  • 15. Hack21  ジェスチャまとめ AndroidHacks にもありますが 定義されているジェスチャ?登録型ジェスチャはそれぞれ一長一短。