mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 20:11:24 +08:00
Fixed multiple gestures for Android
This commit is contained in:
@ -142,14 +142,10 @@ export class View extends proxy.ProxyObject implements definition.View {
|
|||||||
|
|
||||||
public _cssClasses: Array<string> = [];
|
public _cssClasses: Array<string> = [];
|
||||||
|
|
||||||
public _gestureObservers: Map<number, Array<gestures.GesturesObserver>>;
|
public _gestureObservers = {};
|
||||||
|
|
||||||
public getGestureObservers(type: gestures.GestureTypes): Array<gestures.GesturesObserver> {
|
public getGestureObservers(type: gestures.GestureTypes): Array<gestures.GesturesObserver> {
|
||||||
var result;
|
return this._gestureObservers[type];
|
||||||
if (this._gestureObservers) {
|
|
||||||
result = this._gestureObservers.get(type) ? this._gestureObservers.get(type).slice(0) : undefined;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private _updatingInheritedProperties: boolean;
|
private _updatingInheritedProperties: boolean;
|
||||||
@ -167,29 +163,11 @@ export class View extends proxy.ProxyObject implements definition.View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
observe(type: gestures.GestureTypes, callback: (args: gestures.GestureEventData) => void, thisArg?: any): void {
|
observe(type: gestures.GestureTypes, callback: (args: gestures.GestureEventData) => void, thisArg?: any): void {
|
||||||
var gesturesList = this._getGesturesList(type, true);
|
if (!this._gestureObservers[type]) {
|
||||||
gesturesList.push(gestures.observe(this, type, callback, thisArg));
|
this._gestureObservers[type] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getGesturesList(gestureType: number, createIfNeeded): Array<gestures.GesturesObserver> {
|
this._gestureObservers[type].push(gestures.observe(this, type, callback, thisArg));
|
||||||
if (!gestureType) {
|
|
||||||
throw new Error("GestureType must be a valid gesture!");
|
|
||||||
}
|
|
||||||
|
|
||||||
var list: Array<gestures.GesturesObserver>;
|
|
||||||
if (this._gestureObservers && this._gestureObservers.has(gestureType)) {
|
|
||||||
list = this._gestureObservers.get(gestureType);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (createIfNeeded) {
|
|
||||||
list = [];
|
|
||||||
if (!this._gestureObservers) {
|
|
||||||
this._gestureObservers = new Map<number, Array<gestures.GesturesObserver>>();
|
|
||||||
}
|
|
||||||
this._gestureObservers.set(gestureType, list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public addEventListener(arg: string | gestures.GestureTypes, callback: (data: observable.EventData) => void, thisArg?: any) {
|
public addEventListener(arg: string | gestures.GestureTypes, callback: (data: observable.EventData) => void, thisArg?: any) {
|
||||||
|
@ -97,7 +97,7 @@ export class View extends viewCommon.View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private hasGestureObservers() {
|
private hasGestureObservers() {
|
||||||
return this._gestureObservers ? this._gestureObservers.size > 0 : false;
|
return this._gestureObservers && Object.keys(this._gestureObservers).length > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
private setOnTouchListener() {
|
private setOnTouchListener() {
|
||||||
@ -114,18 +114,13 @@ export class View extends viewCommon.View {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var i;
|
for (let type in owner._gestureObservers) {
|
||||||
for (var gestType in gestures.GestureTypes) {
|
let list = owner._gestureObservers[type];
|
||||||
if (gestures.GestureTypes.hasOwnProperty(gestType) && typeof gestures.GestureTypes[gestType] === "number") {
|
for (let i = 0; i < list.length; i++) {
|
||||||
var gestArray = owner.getGestureObservers(parseInt(gestures.GestureTypes[gestType]));
|
list[i].androidOnTouchEvent(motionEvent);
|
||||||
if (gestArray) {
|
|
||||||
for (i = 0; i < gestArray.length; i++) {
|
|
||||||
var gestObserver = gestArray[i];
|
|
||||||
gestObserver.androidOnTouchEvent(motionEvent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return owner._nativeView.onTouchEvent(motionEvent);
|
return owner._nativeView.onTouchEvent(motionEvent);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
2
ui/core/view.d.ts
vendored
2
ui/core/view.d.ts
vendored
@ -416,7 +416,7 @@ declare module "ui/core/view" {
|
|||||||
|
|
||||||
// TODO: Implement logic for stripping these lines out
|
// TODO: Implement logic for stripping these lines out
|
||||||
//@private
|
//@private
|
||||||
_gestureObservers: Map<number, Array<gestures.GesturesObserver>>;
|
_gestureObservers: any;
|
||||||
_isInheritedChange(): boolean;
|
_isInheritedChange(): boolean;
|
||||||
_domId: number;
|
_domId: number;
|
||||||
_cssClasses: Array<string>;
|
_cssClasses: Array<string>;
|
||||||
|
@ -126,18 +126,15 @@ export class GesturesObserver implements definition.GesturesObserver {
|
|||||||
public disconnect() {
|
public disconnect() {
|
||||||
// remove gesture observer from map
|
// remove gesture observer from map
|
||||||
if (this.target) {
|
if (this.target) {
|
||||||
var gestureObserversArray = this.target._gestureObservers.get(this.type);
|
var list = this.target.getGestureObservers(this.type);
|
||||||
if (gestureObserversArray) {
|
if (list && list.length > 0) {
|
||||||
var i;
|
for (let i = 0; i < list.length; i++) {
|
||||||
for (i = 0; i < gestureObserversArray.length; i++) {
|
if (list[i].callback === this.callback) {
|
||||||
if (gestureObserversArray[i].callback === this.callback) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gestureObserversArray.splice(i, 1);
|
list.length = 0;
|
||||||
if (gestureObserversArray.length === 0) {
|
this.target._gestureObservers.delete(this.type);
|
||||||
this.target._gestureObservers.delete(this.type);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this._target = null;
|
this._target = null;
|
||||||
|
@ -185,7 +185,7 @@ class TapAndDoubleTapGestureListener extends android.view.GestureDetector.Simple
|
|||||||
}
|
}
|
||||||
|
|
||||||
public onSingleTapConfirmed(motionEvent: android.view.MotionEvent): boolean {
|
public onSingleTapConfirmed(motionEvent: android.view.MotionEvent): boolean {
|
||||||
if (this._type === definition.GestureTypes.tap) {
|
if (this._type & definition.GestureTypes.tap) {
|
||||||
var args = _getArgs(definition.GestureTypes.tap, this._target, motionEvent);
|
var args = _getArgs(definition.GestureTypes.tap, this._target, motionEvent);
|
||||||
_executeCallback(this._observer, args);
|
_executeCallback(this._observer, args);
|
||||||
}
|
}
|
||||||
@ -193,7 +193,7 @@ class TapAndDoubleTapGestureListener extends android.view.GestureDetector.Simple
|
|||||||
}
|
}
|
||||||
|
|
||||||
public onDoubleTap(motionEvent: android.view.MotionEvent): boolean {
|
public onDoubleTap(motionEvent: android.view.MotionEvent): boolean {
|
||||||
if (this._type === definition.GestureTypes.doubleTap) {
|
if (this._type & definition.GestureTypes.doubleTap) {
|
||||||
var args = _getArgs(definition.GestureTypes.doubleTap, this._target, motionEvent);
|
var args = _getArgs(definition.GestureTypes.doubleTap, this._target, motionEvent);
|
||||||
_executeCallback(this._observer, args);
|
_executeCallback(this._observer, args);
|
||||||
}
|
}
|
||||||
@ -204,12 +204,11 @@ class TapAndDoubleTapGestureListener extends android.view.GestureDetector.Simple
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public onLongPress(motionEvent: android.view.MotionEvent): boolean {
|
public onLongPress(motionEvent: android.view.MotionEvent): void {
|
||||||
if (this._type === definition.GestureTypes.longPress) {
|
if (this._type & definition.GestureTypes.longPress) {
|
||||||
var args = _getArgs(definition.GestureTypes.longPress, this._target, motionEvent);
|
var args = _getArgs(definition.GestureTypes.longPress, this._target, motionEvent);
|
||||||
_executeCallback(this._observer, args);
|
_executeCallback(this._observer, args);
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user