MultiTouchGestureDetector
δΈζηζζ‘£Β Β Β
The MultiTouchGestureDetector Detects scaling, rotating and moving transformation gestures
using the supplied MotionEvent
s. 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 MotionEvent
s 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.