Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android Hacks - Hack21

979 views

Published on

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

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Android Hacks - Hack21

  1. 1. ANDROID HACKS #21 ジェスチャを使う 担当: tsuruoka 09/19/11
  2. 2. この資料について <ul><li>この資料は下記の本をベースに勉強会で作成した資料です。 </li></ul><ul><ul><li>『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊) </li></ul></ul><ul><li>この本の紹介ページが下記にあります。 </li></ul><ul><ul><li>http://www.oreilly.co.jp/books/9784873114569/ </li></ul></ul>09/19/11
  3. 3. アジェンダ <ul><li>Hack21 ジェスチャを使う </li></ul><ul><ul><li>定義されているジェスチャ </li></ul></ul><ul><ul><ul><li>長押し、 Fling など </li></ul></ul></ul><ul><ul><li>登録したジェスチャ </li></ul></ul><ul><ul><ul><li>登録された軌跡との類似度で認識 </li></ul></ul></ul>09/19/11
  4. 4. Hack21. ジェスチャとは <ul><li>2種類のジェスチャがあります </li></ul><ul><ul><li>定義されているジェスチャ </li></ul></ul><ul><ul><ul><li>短押し、シングルタップ、 Fling (さっと払う動き)等 いくつかの操作を”ジェスチャー”として解釈・認識するもの </li></ul></ul></ul><ul><ul><li>登録したジェスチャ </li></ul></ul><ul><ul><ul><li>画面上をなぞる操作に対して登録済みの軌跡との類似度が 一定以上のとき、その軌跡が入力されたと認識するもの </li></ul></ul></ul>09/19/11
  5. 5. Hack21. 定義されているジェスチャ <ul><li>GestureDetectorが Motion Eventを逐次ジェスチャとして解釈します </li></ul><ul><ul><li>解釈とは、下記6つの OnGestureListener のメソッドに当てはめること </li></ul></ul><ul><li>OnGestureListener のメソッド </li></ul><ul><ul><li>onDown </li></ul></ul><ul><ul><ul><li>最初に押したとき呼び出される(ジェスチャはいつもここからはじまる) </li></ul></ul></ul><ul><ul><li>onFling </li></ul></ul><ul><ul><ul><li>さっと振り払う操作が行われた場合呼び出される </li></ul></ul></ul><ul><ul><li>onLongPress </li></ul></ul><ul><ul><ul><li>同じ場所を押しつづけた時に呼び出される </li></ul></ul></ul><ul><ul><ul><li>これが呼び出された後は指を離さない限りジェスチャとしては認識されない </li></ul></ul></ul><ul><ul><li>onScroll </li></ul></ul><ul><ul><ul><li>指を動かしている間中、これが連続して呼び出される </li></ul></ul></ul><ul><ul><li>onShowPress </li></ul></ul><ul><ul><ul><li>ちょっと押したとき呼び出される。 onLongPress の前に必ず呼び出される。 </li></ul></ul></ul><ul><ul><li>onSingleTapUp </li></ul></ul><ul><ul><ul><li>とんっと1回タップした動きに対して呼び出される </li></ul></ul></ul>09/19/11
  6. 6. Hack21 定義されているジェスチャの実装 <ul><li>ジェスチャを取りたい Activity に implements onGestureListener </li></ul><ul><li>フィールド </li></ul><ul><ul><li>GestureDetector gestureScanner </li></ul></ul><ul><li>onCreate </li></ul><ul><ul><li>gestureScanner = new GestureDetector(this) </li></ul></ul><ul><li>Public boolean onTouchEvent(MotionEvent me) </li></ul><ul><li>{ </li></ul><ul><li>・・・・・・ </li></ul><ul><li>return gestureScannner.onTouchEvent(me) </li></ul><ul><li>} </li></ul>
  7. 7. Hack21 定義されているジェスチャー 解釈例 <ul><li>解釈の実行例 </li></ul><ul><li>( onTouchEvent と6つのメソッドそれぞれに logcat 出力させた) </li></ul><ul><li>02-11 17:04:11.792: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:11.792: DEBUG/mydbg(18605): onDown </li></ul><ul><li>02-11 17:04:11.792: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:11.825: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:11.852: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:11.852: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:11.882: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:11.882: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:11.912: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:11.912: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:11.933: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:12.272: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:12.302: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:12.302: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:12.332: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:12.332: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:12.352: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:12.352: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:12.385: DEBUG/mydbg(18605): onTouchEvent </li></ul><ul><li>02-11 17:04:12.385: DEBUG/mydbg(18605): onScroll </li></ul><ul><li>02-11 17:04:12.385: DEBUG/mydbg(18605): onTouchEvent </li></ul>
  8. 8. Hack21 定義されているジェスチャ 解釈例 <ul><li>はじくような操作 (Fling) </li></ul><ul><li>02-11 17:45:47.852: DEBUG/mydbg(21436): onDown </li></ul><ul><li>02-11 17:45:47.952: DEBUG/mydbg(21436): onShowPress </li></ul><ul><li>02-11 17:45:48.242: DEBUG/mydbg(21436): onScroll </li></ul><ul><li>02-11 17:45:48.432: DEBUG/mydbg(21436): onScroll </li></ul><ul><li>02-11 17:45:48.442: DEBUG/mydbg(21436): onFling </li></ul>
  9. 9. Hack21 定義されているジェスチャ 解釈例 <ul><li>短いタップ </li></ul><ul><li>02-11 17:47:02.322: DEBUG/mydbg(21436): onDown </li></ul><ul><li>02-11 17:47:02.422: DEBUG/mydbg(21436): onShowPress </li></ul><ul><li>02-11 17:47:02.652: DEBUG/mydbg(21436): onSingleTapUp </li></ul><ul><li>とか </li></ul><ul><li>02-11 17:47:05.542: DEBUG/mydbg(21436): onDown </li></ul><ul><li>02-11 17:47:05.612: DEBUG/mydbg(21436): onSingleTapUp </li></ul>
  10. 10. Hack21 定義されているジェスチャ 解釈例2 <ul><li>長押を検出したいとき </li></ul><ul><li>02-11 17:10:14.032: DEBUG/mydbg(18916): onDown </li></ul><ul><li>02-11 17:10:14.133: DEBUG/mydbg(18916): onShowPress </li></ul><ul><li>02-11 17:10:14.632: DEBUG/mydbg(18916): onLongPress </li></ul><ul><li>のようにイベントが検出されます。 </li></ul><ul><li>onLongPress 後は gesture として解釈されません。 </li></ul><ul><li>つまり長押あとに動かしても onScroll を取ることができない。 </li></ul>
  11. 11. Hack21 登録されたジェスチャ <ul><li>自分の好きな図形を登録し、それとの類似度で そのジェスチャが行われたかを判断できます </li></ul><ul><li>ジェスチャの登録は </li></ul><ul><ul><li>  android-sdk-windowsplatformsandroid4samplesGestureBuilder </li></ul></ul><ul><ul><li>を自分でビルドして そこから登録すれば良い </li></ul></ul><ul><ul><li>登録されたジェスチャがファイルとして出力される </li></ul></ul><ul><ul><li>それを自分のアプリに組み込んで利用できる </li></ul></ul><ul><ul><ul><li>GestureBuilder で登録したジェスチャは gestures ファイルとして SD card のルートに吐き出されます </li></ul></ul></ul><ul><ul><ul><li>プロジェクト内の Res/raw/gestures  に </li></ul></ul></ul><ul><ul><ul><li>   gestures ファイルを置くなどして利用 </li></ul></ul></ul>
  12. 12. Hack21 登録されたジェスチャ <ul><li>Ges tureBuilder で登録しました </li></ul><ul><li>ジェスチャには名前をつけることができます。 </li></ul><ul><li>(なぜか) </li></ul><ul><li>2画以上のジェスチャも登録できます。 </li></ul>
  13. 13. Hack21 登録されたジェスチャの実装 <ul><li>ジェスチャを取り込む専用の View を使います </li></ul><ul><ul><li><android.gesture.GestureOverlayView> </li></ul></ul><ul><li>フィールド </li></ul><ul><ul><li>Private GestureLibrary mLibrary </li></ul></ul><ul><li>onCreate </li></ul><ul><ul><li>mLibrary = GestureLibraries.fromRawResource(this,R.raw.gestures); </li></ul></ul><ul><ul><ul><li>gestures はジェスチャを登録したファイル名 </li></ul></ul></ul><ul><ul><li>GestureOverlayview gestures = (GestureOverlayView)findViewById(R.id. XXX ) </li></ul></ul><ul><ul><ul><li>XXX は GestureOverlayView の id </li></ul></ul></ul><ul><ul><li>Gestures.addOnGesturePerformedListener(this) </li></ul></ul>
  14. 14. Hack21 登録されたジェスチャの実装 <ul><li>public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { </li></ul><ul><li>Log. d (&quot;mydgb&quot;, &quot;onGesturePerformed&quot;); </li></ul><ul><li>ArrayList<Prediction> predictions = mLibrary.recognize(gesture); </li></ul><ul><li>// We want at least one prediction </li></ul><ul><li>if (predictions.size() > 0) { </li></ul><ul><li>Prediction prediction = predictions.get(0); </li></ul><ul><li>// We want at least some confidence in the result </li></ul><ul><li>if (prediction.score > 1.0) { </li></ul><ul><li>// Show the spell </li></ul><ul><li>Toast. makeText (this, prediction.name, Toast. LENGTH_SHORT ).show(); </li></ul><ul><li>} </li></ul><ul><li>}else{ </li></ul><ul><li>Toast. makeText (this, &quot;Such gesture isn't registered.&quot;, Toast. LENGTH_SHORT ).show(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  15. 15. Hack21  ジェスチャまとめ <ul><li>AndroidHacks にもありますが </li></ul><ul><li>定義されているジェスチャ・登録型ジェスチャはそれぞれ一長一短。 </li></ul>

×