ピンチ(拡大/縮小)のジェスチャーを実装する方法 | Androidアプリ開発

※当サイトはアフィリエイト広告を利用しています。

Androidアプリ開発において、ピンチ(拡大/縮小)のジェスチャーを実装する方法を紹介します。

なお、タップ/フリックのジェスチャーの実装方法やタッチ/フリックジェスチャーとピンチジェスチャーを同時実装する方法は以下の記事を御覧ください。
スポンサーリンク


ピンチ(拡大/縮小)のジェスチャーを実装する方法

ピンチ(拡大/縮小)のジェスチャーを実装するにはActivityにScaleGestureDetector.OnScaleGestureListenerを実装し、各種ジェスチャーに対応したメソッドをoverrideします。

以下サンプルコードです。
public class GestureTestActivity extends AppCompatActivity implements ScaleGestureDetector.OnScaleGestureListener {
    ScaleGestureDetector mScaleDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gesture_test);

        mScaleDetector = new ScaleGestureDetector(this, this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mScaleDetector.onTouchEvent(event);
    }

    @Override
    public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
        //ピンチ動作中
        Log.d("MY_LOG_TAG", "onScale");
        if(scaleGestureDetector.getScaleFactor() > 1) {
            //拡大動作
            Log.d("MY_LOG_TAG", "拡大");
        } else {
            //縮小動作
            Log.d("MY_LOG_TAG", "縮小");
        }
        return true;
    }

    @Override
    public boolean onScaleBegin(ScaleGestureDetector scaleGestureDetector) {
        //ピンチ動作開始
        Log.d("MY_LOG_TAG", "onScaleBegin");
        return true;
    }

    @Override
    public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) {
        //ピンチ動作終了
        Log.d("MY_LOG_TAG", "onScaleEnd");
    }
}

サンプルコードの解説

サンプルコードを解説していきます。

ジェスチャーオブジェクトを取得する。

まずはジェスチャーオブジェクトを取得します。
    ScaleGestureDetector mScaleDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gesture_test);

        mScaleDetector = new ScaleGestureDetector(this, this);
    }

ジェスチャーオブジェクトへタッチイベントを渡す

さきほど取得したジェスチャーオブジェクトに対してタッチイベントを渡してあげます。
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mScaleDetector.onTouchEvent(event);
    }

各種ジェスチャーの動作を定義する

この後は各種ジェスチャーの動作を定義するだけです。

たとえば以下はonScaleEndというピンチ動作終了時にコールされるメソッドです。
    @Override
    public void onScaleEnd(ScaleGestureDetector scaleGestureDetector) {
        //ピンチ動作終了
        Log.d("MY_LOG_TAG", "onScaleEnd");
    }

拡大 or 縮小を判定する

拡大 or 縮小を判定するにはピンチ中のジェスチャーであるonScaleメソッド内でgetScaleFactorでその拡大比率を取得すればOKです。

以下、サンプルコードです。
    @Override
    public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
        //ピンチ動作中
        Log.d("MY_LOG_TAG", "onScale");
        if(scaleGestureDetector.getScaleFactor() > 1) {
            //拡大動作
            Log.d("MY_LOG_TAG", "拡大");
        } else {
            //縮小動作
            Log.d("MY_LOG_TAG", "縮小");
        }
        return true;
    }

まとめ

Androidアプリ開発において、ピンチ(拡大/縮小)のジェスチャーを実装する方法を紹介しました。

なお、タップ/フリックのジェスチャーの実装方法やタッチ/フリックジェスチャーとピンチジェスチャーを同時実装する方法は以下の記事を御覧ください。