The MultiTouchGestureDetector Detects scaling, rotating and moving transformation gestures, Whether you want ScaleGestureDetector, RotateGestureDetector, or MoveGestureDetector, this is always the best choice.
Clone or download
Latest commit 952ff7d Dec 15, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Preview first commit Dec 15, 2018
app first commit Dec 15, 2018
multitouchgesturedetector first commit Dec 15, 2018
.gitignore first commit Dec 15, 2018
README-ZH.md first commit Dec 15, 2018
README.md first commit Dec 15, 2018
build.gradle first commit Dec 15, 2018
gradle.properties first commit Dec 15, 2018
gradlew first commit Dec 15, 2018
gradlew.bat first commit Dec 15, 2018
settings.gradle first commit Dec 15, 2018

README.md

MultiTouchGestureDetector

中文版文档   

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.

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

License

Copyright 2015-2019 dinuscxj

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.