From 8d5ef9b15b0aebb7064c1405db9b5466a9d39ce5 Mon Sep 17 00:00:00 2001 From: Josh Sommer Date: Sat, 14 May 2016 08:23:37 -0400 Subject: [PATCH 1/3] changed getX and getY to getRawX and getRawY getRawX & Y always return the X & Y coordinates relative to the view getX and getY sometimes return coordinates that are relative to the previous motion. this update will allow smoother coordinates on panning instead of occasional jumping back and fourth of the delta X and Y coordinates --- ui/gestures/gestures.android.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ui/gestures/gestures.android.ts b/ui/gestures/gestures.android.ts index 14a982711..29c2ffb23 100644 --- a/ui/gestures/gestures.android.ts +++ b/ui/gestures/gestures.android.ts @@ -110,7 +110,7 @@ export class GesturesObserver extends common.GesturesObserver { this._eventData = new TouchGestureEventData(); } - this._eventData.prepare(this.target, motionEvent); + this._eventData.prepare(this.target, motionEvent); _executeCallback(this, this._eventData); } @@ -489,9 +489,9 @@ class CustomPanGestureDetector { private getMotionEventCenter(event: android.view.MotionEvent): { x: number, y: number } { let count = event.getPointerCount(); let res = { x: 0, y: 0 }; - for (var i = 0; i < count; i++) { - res.x += event.getX(i); - res.y += event.getY(i); + for (let i = 0; i < count; i++) { + res.x += event.getRawX(); + res.y += event.getRawY(); } res.x /= (count * this.density); From c22f7ce4787fb18ab6f2e8798dd82bf6f6f7ad9d Mon Sep 17 00:00:00 2001 From: vakrilov Date: Mon, 16 May 2016 13:52:35 +0300 Subject: [PATCH 2/3] Multi-pointer case - covered --- ui/gestures/gestures.android.ts | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/ui/gestures/gestures.android.ts b/ui/gestures/gestures.android.ts index 29c2ffb23..b5db883ee 100644 --- a/ui/gestures/gestures.android.ts +++ b/ui/gestures/gestures.android.ts @@ -468,7 +468,7 @@ class CustomPanGestureDetector { } private trackStart(currentEvent: android.view.MotionEvent) { - let inital = this.getMotionEventCenter(this.lastEventCache ? this.lastEventCache : currentEvent); + let inital = this.getEventCoordinates(this.lastEventCache ? this.lastEventCache : currentEvent); this.initialX = inital.x; this.initialY = inital.y; this.isTracking = true; @@ -478,7 +478,7 @@ class CustomPanGestureDetector { } private trackChange(currentEvent: android.view.MotionEvent) { - let current = this.getMotionEventCenter(currentEvent); + let current = this.getEventCoordinates(currentEvent); this.deltaX = current.x - this.initialX; this.deltaY = current.y - this.initialY; @@ -486,18 +486,28 @@ class CustomPanGestureDetector { _executeCallback(this.observer, args); } - private getMotionEventCenter(event: android.view.MotionEvent): { x: number, y: number } { - let count = event.getPointerCount(); - let res = { x: 0, y: 0 }; - for (let i = 0; i < count; i++) { - res.x += event.getRawX(); - res.y += event.getRawY(); + private getEventCoordinates(event: android.view.MotionEvent): { x: number, y: number } { + var count = event.getPointerCount(); + if (count === 1) { + return { + x: event.getRawX() / this.density, + y: event.getRawY() / this.density + }; } + else { + var res = { x: 0, y: 0 }; + var offX = event.getRawX() - event.getX(); + var offY = event.getRawY() - event.getY(); - res.x /= (count * this.density); - res.y /= (count * this.density); + for (var i = 0; i < count; i++) { + res.x += event.getX(i) + offX; + res.y += event.getY(i) + offY; + } - return res; + res.x /= (count * this.density); + res.y /= (count * this.density); + return res; + } } } From 1f4c93d270ad7527601563abd0184185f326829a Mon Sep 17 00:00:00 2001 From: vakrilov Date: Tue, 17 May 2016 14:48:21 +0300 Subject: [PATCH 3/3] Minor refactorings --- ui/gestures/gestures.android.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/gestures/gestures.android.ts b/ui/gestures/gestures.android.ts index b5db883ee..2281d9eb9 100644 --- a/ui/gestures/gestures.android.ts +++ b/ui/gestures/gestures.android.ts @@ -487,7 +487,7 @@ class CustomPanGestureDetector { } private getEventCoordinates(event: android.view.MotionEvent): { x: number, y: number } { - var count = event.getPointerCount(); + const count = event.getPointerCount(); if (count === 1) { return { x: event.getRawX() / this.density, @@ -495,11 +495,11 @@ class CustomPanGestureDetector { }; } else { - var res = { x: 0, y: 0 }; - var offX = event.getRawX() - event.getX(); - var offY = event.getRawY() - event.getY(); + const offX = event.getRawX() - event.getX(); + const offY = event.getRawY() - event.getY(); + let res = { x: 0, y: 0 }; - for (var i = 0; i < count; i++) { + for (let i = 0; i < count; i++) { res.x += event.getX(i) + offX; res.y += event.getY(i) + offY; }