MultiTouchGestureDetector

The MultiTouchGestureDetector Detects scaling, rotating and moving transformation gestures, Whether you want ScaleGestureDetector, RotateGestureDetector, or MoveGestureDetector, this is always the best choice.

The MultiTouchGestureDetector Detects scaling, rotating and moving transformation gestures using the supplied MotionEvents. The OnMultiTouchGestureListener callback will notify users when a particular gesture event has occurred, besides, SimpleOnMultiTouchGestureListener is offered as a helper class that you can extend if you don’t care about all of the reported events. This class should only be used with MotionEvents reported via touch.

MultiTouchGestureDetector

Usage

Step 1. Create our MultiTouchGestureDetector

        mMultiTouchGestureDetector = new MultiTouchGestureDetector(context, new MultiTouchGestureDetectorListener());

Step 2. Let the MultiTouchGestureDetector inspect all events.

        mMultiTouchGestureDetector.onTouchEvent(event);

Step 3. Record the detected gesture transformations.

private final class MultiTouchGestureDetectorListener extends MultiTouchGestureDetector.SimpleOnMultiTouchGestureListener {

        @Override
        public void onScale(MultiTouchGestureDetector detector) {
            mScaleFactor *= detector.getScale();
            mScaleFactor = Math.max(1.0f, Math.min(mScaleFactor, 5.0f));

            invalidate();
        }

        @Override
        public void onMove(MultiTouchGestureDetector detector) {
            mOffsetX += detector.getMoveX();
            mOffsetY += detector.getMoveY();

            invalidate();
        }

        @Override
        public void onRotate(MultiTouchGestureDetector detector) {
            mRotation += detector.getRotation();

            invalidate();
        }
    }

Step 4. Apply the gesture transformations

        canvas.save();
        canvas.translate(mOffsetX, mOffsetY);
        canvas.scale(mScaleFactor, mScaleFactor, mIcon.getIntrinsicWidth() / 2, mIcon.getIntrinsicHeight() / 2);
        canvas.rotate(mRotation, mIcon.getIntrinsicWidth() / 2, mIcon.getIntrinsicHeight() / 2);
        mIcon.draw(canvas);
        canvas.restore();

If necessary the full usage is here.

Gradle

    dependencies {
        compile 'com.dinuscxj:multitouchgesturedetector:1.0.0'
    }

Application scenarios

  • Sticker system. such as the story feature of the Instagram.
  • Media Browsing. such as the feed detail page of the Facebook

GitHub