Fix abrupt multitouch movement

This commit is contained in:
alek3y 2023-02-24 22:05:55 +01:00
parent d84906bf9c
commit a09f71bb25

View File

@ -64,6 +64,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) {
private var mIsBucketFillOn = false private var mIsBucketFillOn = false
private var mWasMultitouch = false private var mWasMultitouch = false
private var mIgnoreTouches = false private var mIgnoreTouches = false
private var mIgnoreMultitouchChanges = false
private var mWasScalingInGesture = false private var mWasScalingInGesture = false
private var mWasMovingCanvasInGesture = false private var mWasMovingCanvasInGesture = false
private var mBackgroundColor = 0 private var mBackgroundColor = 0
@ -168,7 +169,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) {
actionMove(newValueX, newValueY) actionMove(newValueX, newValueY)
} }
if (mAllowMovingZooming && mWasMultitouch) { if (mAllowMovingZooming && mWasMultitouch && !mIgnoreMultitouchChanges) {
mPosX += x - mLastTouchX mPosX += x - mLastTouchX
mPosY += y - mLastTouchY mPosY += y - mLastTouchY
mWasMovingCanvasInGesture = true mWasMovingCanvasInGesture = true
@ -177,6 +178,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) {
mLastTouchX = x mLastTouchX = x
mLastTouchY = y mLastTouchY = y
mIgnoreMultitouchChanges = false
} }
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
mActivePointerId = INVALID_POINTER_ID mActivePointerId = INVALID_POINTER_ID
@ -187,12 +189,14 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) {
MotionEvent.ACTION_POINTER_DOWN -> { MotionEvent.ACTION_POINTER_DOWN -> {
if (mAllowMovingZooming) { if (mAllowMovingZooming) {
mWasMultitouch = true mWasMultitouch = true
mIgnoreMultitouchChanges = true
mTouchSloppedBeforeMultitouch = mLastMotionEvent.isTouchSlop(pointerIndex, mStartX, mStartY) mTouchSloppedBeforeMultitouch = mLastMotionEvent.isTouchSlop(pointerIndex, mStartX, mStartY)
} }
} }
MotionEvent.ACTION_POINTER_UP -> { MotionEvent.ACTION_POINTER_UP -> {
if (mAllowMovingZooming) { if (mAllowMovingZooming) {
mIgnoreTouches = true mIgnoreTouches = true
mIgnoreMultitouchChanges = true
actionUp(!mWasScalingInGesture && !mWasMovingCanvasInGesture) actionUp(!mWasScalingInGesture && !mWasMovingCanvasInGesture)
} }
} }