mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
states for various gestures added
This commit is contained in:
@@ -12,13 +12,10 @@ export enum GestureTypes {
|
||||
}
|
||||
|
||||
export enum GestureStateTypes {
|
||||
possible = 1 << 0,
|
||||
recognized = 1 << 1,
|
||||
failed = 1 << 2,
|
||||
cancelled = 1 << 3,
|
||||
began = 1 << 4,
|
||||
changed = 1 << 5,
|
||||
ended = 1 << 6
|
||||
cancelled,
|
||||
began,
|
||||
changed,
|
||||
ended
|
||||
}
|
||||
|
||||
export enum SwipeDirection {
|
||||
|
||||
@@ -116,7 +116,8 @@ export class GesturesObserver extends common.GesturesObserver {
|
||||
rotation: degrees,
|
||||
ios: undefined,
|
||||
object: this.target,
|
||||
eventName: definition.toString(definition.GestureTypes.rotation)
|
||||
eventName: definition.toString(definition.GestureTypes.rotation),
|
||||
state: getState(motionEvent)
|
||||
}
|
||||
|
||||
//var observer = that.get();
|
||||
@@ -128,6 +129,18 @@ export class GesturesObserver extends common.GesturesObserver {
|
||||
}
|
||||
}
|
||||
|
||||
function getState(e: android.view.MotionEvent) {
|
||||
if (e.getAction() === android.view.MotionEvent.ACTION_DOWN) {
|
||||
return common.GestureStateTypes.began;
|
||||
} else if (e.getAction() === android.view.MotionEvent.ACTION_CANCEL) {
|
||||
return common.GestureStateTypes.cancelled;
|
||||
} else if (e.getAction() === android.view.MotionEvent.ACTION_MOVE) {
|
||||
return common.GestureStateTypes.changed;
|
||||
} else if (e.getAction() === android.view.MotionEvent.ACTION_UP) {
|
||||
return common.GestureStateTypes.ended;
|
||||
}
|
||||
}
|
||||
|
||||
function _getArgs(type: definition.GestureTypes, view: view.View, e: android.view.MotionEvent): definition.GestureEventData {
|
||||
return <definition.GestureEventData>{
|
||||
type: type,
|
||||
@@ -149,6 +162,7 @@ function _getSwipeArgs(direction: definition.SwipeDirection, view: view.View,
|
||||
ios: undefined,
|
||||
object: view,
|
||||
eventName: definition.toString(definition.GestureTypes.swipe),
|
||||
state: getState(currentEvent)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -163,6 +177,7 @@ function _getPanArgs(deltaX: number, deltaY: number, view: view.View,
|
||||
ios: undefined,
|
||||
object: view,
|
||||
eventName: definition.toString(definition.GestureTypes.pan),
|
||||
state: getState(currentEvent)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -217,6 +232,7 @@ class TapAndDoubleTapGestureListener extends android.view.GestureDetector.Simple
|
||||
class PinchGestureListener extends android.view.ScaleGestureDetector.SimpleOnScaleGestureListener {
|
||||
private _observer: GesturesObserver;
|
||||
private _target: view.View;
|
||||
private _state: common.GestureStateTypes;
|
||||
|
||||
constructor(observer: GesturesObserver, target: view.View) {
|
||||
super();
|
||||
@@ -235,12 +251,45 @@ class PinchGestureListener extends android.view.ScaleGestureDetector.SimpleOnSca
|
||||
scale: detector.getScaleFactor(),
|
||||
object: this._target,
|
||||
eventName: definition.toString(definition.GestureTypes.pinch),
|
||||
ios: undefined
|
||||
ios: undefined,
|
||||
state: common.GestureStateTypes.changed
|
||||
};
|
||||
|
||||
_executeCallback(this._observer, args);
|
||||
return true;
|
||||
}
|
||||
|
||||
public onScaleBegin(detector: android.view.ScaleGestureDetector): boolean {
|
||||
var args = <definition.PinchGestureEventData>{
|
||||
type: definition.GestureTypes.pinch,
|
||||
view: this._target,
|
||||
android: detector,
|
||||
scale: detector.getScaleFactor(),
|
||||
object: this._target,
|
||||
eventName: definition.toString(definition.GestureTypes.pinch),
|
||||
ios: undefined,
|
||||
state: common.GestureStateTypes.began
|
||||
};
|
||||
|
||||
_executeCallback(this._observer, args);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public onScaleEnd(detector: android.view.ScaleGestureDetector): void {
|
||||
var args = <definition.PinchGestureEventData>{
|
||||
type: definition.GestureTypes.pinch,
|
||||
view: this._target,
|
||||
android: detector,
|
||||
scale: detector.getScaleFactor(),
|
||||
object: this._target,
|
||||
eventName: definition.toString(definition.GestureTypes.pinch),
|
||||
ios: undefined,
|
||||
state: common.GestureStateTypes.ended
|
||||
};
|
||||
|
||||
_executeCallback(this._observer, args);
|
||||
}
|
||||
}
|
||||
|
||||
class SwipeGestureListener extends android.view.GestureDetector.SimpleOnGestureListener {
|
||||
|
||||
37
ui/gestures/gestures.d.ts
vendored
37
ui/gestures/gestures.d.ts
vendored
@@ -39,6 +39,28 @@ declare module "ui/gestures" {
|
||||
longPress
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines an enum with supported gesture types.
|
||||
*/
|
||||
export enum GestureStateTypes {
|
||||
/**
|
||||
* Gesture cancelled.
|
||||
*/
|
||||
cancelled,
|
||||
/**
|
||||
* Gesture began.
|
||||
*/
|
||||
began,
|
||||
/**
|
||||
* Gesture changed.
|
||||
*/
|
||||
changed,
|
||||
/**
|
||||
* Gesture ended.
|
||||
*/
|
||||
ended
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines an enum for swipe gesture direction.
|
||||
*/
|
||||
@@ -86,21 +108,28 @@ declare module "ui/gestures" {
|
||||
/**
|
||||
* Provides gesture event data for pinch gesture.
|
||||
*/
|
||||
export interface PinchGestureEventData extends GestureEventData {
|
||||
export interface GestureEventDataWithState extends GestureEventData {
|
||||
state: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides gesture event data for pinch gesture.
|
||||
*/
|
||||
export interface PinchGestureEventData extends GestureEventDataWithState {
|
||||
scale: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides gesture event data for swipe gesture.
|
||||
*/
|
||||
export interface SwipeGestureEventData extends GestureEventData {
|
||||
export interface SwipeGestureEventData extends GestureEventDataWithState {
|
||||
direction: SwipeDirection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides gesture event data for pan gesture.
|
||||
*/
|
||||
export interface PanGestureEventData extends GestureEventData {
|
||||
export interface PanGestureEventData extends GestureEventDataWithState {
|
||||
deltaX: number;
|
||||
deltaY: number;
|
||||
}
|
||||
@@ -108,7 +137,7 @@ declare module "ui/gestures" {
|
||||
/**
|
||||
* Provides gesture event data for rotation gesture.
|
||||
*/
|
||||
export interface RotationGestureEventData extends GestureEventData {
|
||||
export interface RotationGestureEventData extends GestureEventDataWithState {
|
||||
rotation: number;
|
||||
}
|
||||
|
||||
|
||||
@@ -238,6 +238,18 @@ function _getUIGestureRecognizerType(type: definition.GestureTypes): any {
|
||||
return nativeType;
|
||||
}
|
||||
|
||||
function getState(recognizer: UIGestureRecognizer) {
|
||||
if (recognizer.state === UIGestureRecognizerState.UIGestureRecognizerStateBegan) {
|
||||
return common.GestureStateTypes.began;
|
||||
} else if (recognizer.state === UIGestureRecognizerState.UIGestureRecognizerStateCancelled) {
|
||||
return common.GestureStateTypes.cancelled;
|
||||
} else if (recognizer.state === UIGestureRecognizerState.UIGestureRecognizerStateChanged) {
|
||||
return common.GestureStateTypes.changed;
|
||||
} else if (recognizer.state === UIGestureRecognizerState.UIGestureRecognizerStateEnded) {
|
||||
return common.GestureStateTypes.ended;
|
||||
}
|
||||
}
|
||||
|
||||
function _getSwipeDirection(direction: UISwipeGestureRecognizerDirection): definition.SwipeDirection {
|
||||
if (direction === UISwipeGestureRecognizerDirection.UISwipeGestureRecognizerDirectionDown) {
|
||||
return definition.SwipeDirection.down;
|
||||
@@ -259,7 +271,8 @@ function _getPinchData(args: definition.GestureEventData): definition.PinchGestu
|
||||
android: undefined,
|
||||
scale: recognizer.scale,
|
||||
object: args.view,
|
||||
eventName: definition.toString(args.type)
|
||||
eventName: definition.toString(args.type),
|
||||
state: getState(recognizer)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -272,7 +285,8 @@ function _getSwipeData(args: definition.GestureEventData): definition.SwipeGestu
|
||||
android: undefined,
|
||||
direction: _getSwipeDirection(recognizer.direction),
|
||||
object: args.view,
|
||||
eventName: definition.toString(args.type)
|
||||
eventName: definition.toString(args.type),
|
||||
state: getState(recognizer)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -286,7 +300,8 @@ function _getPanData(args: definition.GestureEventData, view: UIView): definitio
|
||||
deltaX: recognizer.translationInView(view).x,
|
||||
deltaY: recognizer.translationInView(view).y,
|
||||
object: args.view,
|
||||
eventName: definition.toString(args.type)
|
||||
eventName: definition.toString(args.type),
|
||||
state: getState(recognizer)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -299,6 +314,7 @@ function _getRotationData(args: definition.GestureEventData): definition.Rotatio
|
||||
android: undefined,
|
||||
rotation: recognizer.rotation * (180.0 / Math.PI),
|
||||
object: args.view,
|
||||
eventName: definition.toString(args.type)
|
||||
eventName: definition.toString(args.type),
|
||||
state: getState(recognizer)
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user