android hacks - hack21
Post on 24-May-2015
807 Views
Preview:
DESCRIPTION
TRANSCRIPT
ANDROIDHACKS#21 ジェスチャを使う
担当: tsuruoka
23/04/12
1
この資料について• この資料は下記の本をベースに勉強会で作成した資料です。
• 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)
• この本の紹介ページが下記にあります。
• http://www.oreilly.co.jp/books/9784873114569/
23/04/12
2
アジェンダ• Hack21 ジェスチャを使う
• 定義されているジェスチャ• 長押し、 Fling など
• 登録したジェスチャ• 登録された軌跡との類似度で認識
23/04/12
3
Hack21. ジェスチャとは• 2種類のジェスチャがあります
• 定義されているジェスチャ• 短押し、シングルタップ、 Fling (さっと払う動き)等
いくつかの操作を” ジェスチャー”として解釈・認識するもの• 登録したジェスチャ
• 画面上をなぞる操作に対して登録済みの軌跡との類似度が一定以上のとき、その軌跡が入力されたと認識するもの
23/04/12
4
Hack21.定義されているジェスチャ
• GestureDetectorが Motion Eventを逐次ジェスチャとして解釈します
• 解釈とは、下記6つの OnGestureListener のメソッドに当てはめること• OnGestureListener のメソッド
• onDown
• 最初に押したとき呼び出される(ジェスチャはいつもここからはじまる)• onFling
• さっと振り払う操作が行われた場合呼び出される• onLongPress
• 同じ場所を押しつづけた時に呼び出される• これが呼び出された後は指を離さない限りジェスチャとしては認識されない
• onScroll
• 指を動かしている間中、これが連続して呼び出される• onShowPress
• ちょっと押したとき呼び出される。 onLongPress の前に必ず呼び出される。• onSingleTapUp
• とんっと1回タップした動きに対して呼び出される
23/04/125
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-windows\platforms\android4\samples\GestureBuilder
を自分でビルドして そこから登録すれば良い• 登録されたジェスチャがファイルとして出力される• それを自分のアプリに組み込んで利用できる
• 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("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();
}
}
Hack21 ジェスチャまとめAndroidHacks にもありますが
定義されているジェスチャ・登録型ジェスチャはそれぞれ一長一短。
top related