hyoromoのブログ

iOS/AndroidもしくはCocos2dxネタを書いています

Android4.4から追加された "Double touch drag" ジェスチャーを利用してみる

f:id:hyoromo:20140122063157j:plain
"Double touch drag" は、ダブルタップ後に下上へスワイプ移動をさせる事で拡大/縮小するGoogle Mapアプリでやってるジェスチャーの事です。ピンチイン/アウトと併用して使うことになります。

"Double touch drag" の有効化

対応方法は凄く簡単で、単に AndroidManifest.xml 上の targetSdkVersion を 19 以上に設定すればOK。ターゲットを4.4(19)以上にすると、4.4以上の端末だとデフォルトで有効状態になります。そして4.4未満の端末では "Double touch drag" では利用出来ません

"Double touch drag" の無効化

targetSdkVersion=19以上を指定する事で有効になる訳ですが、実装状況によっては邪魔なジェスチャーになっているかもしれません。シングルタップやダブルタップとは競合するので何らかの措置を講じるか、機能無効にした方が良いと思います。

Kitkat(4.4)以上での無効化にする方法

もし無効にしたい場合は以下を設定すればOK。

// 端末バージョンが19以上であるかチェックして実行する必要がある点に注意
ScaleGestureDetector#setQuickScaleEnabled(false);

詳しくはWebで。

Kitkat(4.4)未満での無効化にする方法

libsフォルダ内に居る android-support-v4.jar を最新*1にして、以下のコードを追加すればOK。

mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
ScaleGestureDetectorCompat.setQuickScaleEnabled(mScaleDetector, false); // 追加するのはこの一文

詳しくはWebで。

余談

ScaleGestureDetectorCompat って4.4未満でも "Double touch drag" が動作するようGoogleがサポートしてくれているかのように思ってしまうかもしれませんが、そんな事はないです。ソース見たら4.4以上の場合はScaleGestureDetector#setQuickScaleEnabledを設定し、4.4未満の場合は何も処理しないだけでした。

nicoマンガ」アプリで実装しました

電車で見ることが多いだろうなぁと思い、"Double touch drag" 対応しました。シングルタップと競合したのでシングルタップされてから0.25秒以内に次タップが無ければシングル扱い、あればダブルタップ扱いになるよう実装しています。また、4.4未満だと遅延実行しないようにもしています。
動作を参考にされたい場合は以下から確認ください。

nicoマンガ
hyoromo
価格:無料

*1:4.4リリース以降