タッチイベントのフック (Android Kotlin)

/


動画のように画面に指を触れて動かしたときの移動量を取得できるようなプログラムを作ってみた。





TouchableFragmentクラス




今回はフラグメントを使用してタッチイベントのフックを行った。
TouchableFragmentクラスを作成し、フラグメントのレイアウトファイルにイベントフック専用のビューであるtouchableViewを配置した。
このビューをフラグメントのonCreateViewで取得しリスナー登録を済ませておく。



次にTouchableFragmentクラスにView.OnTouchListenerインタフェースを実装する。そしてそのメンバメソッドであるonTouchメソッドを次のようにオーバーライドする。



今回は移動量を計算させているが他にもVelocityTrackerを使って指の速度を得ることも出来るようになっている。詳しくはこちらを参考にしてもらいたい。

Track touch and pointer movements

さてTouchableFragmentクラスの全体のプログラム内容は次のようになっている。




MainActivityクラス


次にMainActivityクラスでの実装を行っていく。アクティビティのレイアウトファイルの左半分にはテキストビューを設置し、右半分にはフラグメントを入れ込むためにフレームレイアウトを設置した。

そしてMainActivityから動的にフラグメントを生成させるためのコードは次のようになる。



フラグメントをファクトリメソッドで生成し引数を渡せるようにしている。またフラグメントからのコールバックを受けて取れるようにインターフェースを使った実装を行っている。先頭のactionDownactionMoveactionUpメソッドはTouchableFragmentからのコールバック関数となる。actionMoveでは指の移動量が渡されるのでその値をテキストビューにセットして表示させている。

最後にプロジェクトを実行し、画面右半分の中で指を動かせばテキストビューに移動量が表示されるだろう。



タッチイベントの処理をアクティビティに直接書いてしまうとアクティビティが読みづらくなってしまうので、このようにフラグメントに追い出した方が管理しやすくなるので参考にしたい。


参考


* Track touch and pointer movements
* android: move a view on touch move (ACTION_MOVE)


関連記事


非同期 & ネットワーク処理
* はじめてRetrofitを使ってみる (Android Kotlin)
* 非同期処理でCoroutine(コルーチン)を使ってみる (Android Kotlin)
* OkHttpでHTTP通信 (Android Kotlin)
* スレッド処理 (Android Kotlin)

View & レイアウト
* リサイクラービューを使ってリスト表示 (Android Kotlin)
* 角丸表現 (Android Kotlin)
* onSaveInstanceStateで画面回転時の状態の保存と復元 (Android Kotlin)
* ListViewを簡単なモデルで理解しよう (Android Kotlin)
* バネアニメーション (Android Kotlin)
* startActivityForResultを使ってみる (Android Kotlin)
* ActivityとFragmentの連携を理解する (Android Kotlin)
* DataBinding機能を使ってみる (Android Kotlin)
* タッチイベントのフック (Android Kotlin)
* DialogFragmentを使ったダイアログの表示 (Android Kotlin)

サウンド
* これってSoundPoolのバグ?(Android Kotlin)
* SoundPoolを使ってゲームの効果音を再生する (Android Kotlin)

データ & オブジェクト
* Kotlinでオブジェクト(object)の動作確認
*
データクラスとタプル (Android Kotlin)
* Null安全、ぬるぽバイバイ (Android Kotlin)