Java: GestureDetectorとScaleGestureDetectorを併用する

GestureDetectorScaleGestureDetector
どちらもonTouchEvent(MotionEvent event)内で呼ぶ形で使用しますが、
そのまま以下のように両方呼んでしまうと、ピンチインの時もonScroll()が呼ばれてしまうなどの問題が発生します。

public boolean onTouchEvent(MotionEvent event) {
    boolean a = gestureDetector.onTouchEvent(event) 
    boolean b = scaleGestureDetector.onTouchEvent(event);
    return a || b;
}

そこで、以下のように指の数に応じて分岐することで、問題無く共存できました。
拡大 + スクロールを行うようなビューを作るときに便利です。

public boolean onTouchEvent(MotionEvent event) {
    return event.getPointerCount() == 1 ? gestureDetector.onTouchEvent(event) : scaleGestureDetector.onTouchEvent(event);
}
Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ