mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
states for various gestures added
This commit is contained in:
@ -28,21 +28,25 @@ export function createPage() {
|
||||
var swipeLabel = new labelModule.Label();
|
||||
swipeLabel.height = labelHeight;
|
||||
swipeLabel.text = "Swipe here";
|
||||
swipeLabel.textWrap = true;
|
||||
stack.addChild(swipeLabel);
|
||||
|
||||
var panLabel = new labelModule.Label();
|
||||
panLabel.height = labelHeight;
|
||||
panLabel.text = "Pan here";
|
||||
panLabel.textWrap = true;
|
||||
stack.addChild(panLabel);
|
||||
|
||||
var pinchLabel = new labelModule.Label();
|
||||
pinchLabel.height = labelHeight;
|
||||
pinchLabel.text = "Pinch here";
|
||||
pinchLabel.textWrap = true;
|
||||
stack.addChild(pinchLabel);
|
||||
|
||||
var rotaionLabel = new labelModule.Label();
|
||||
rotaionLabel.height = labelHeight;
|
||||
rotaionLabel.text = "Rotate here";
|
||||
rotaionLabel.textWrap = true;
|
||||
stack.addChild(rotaionLabel);
|
||||
|
||||
stopButton.on(button.Button.tapEvent, function () {
|
||||
@ -81,25 +85,25 @@ export function createPage() {
|
||||
var observer3 = longpressLabel.getGestureObservers(gestures.GestureTypes.longPress)[0];
|
||||
|
||||
swipeLabel.on(gestures.GestureTypes.swipe, function (args: gestures.SwipeGestureEventData) {
|
||||
swipeLabel.text = "Swipe Direction: " + args.direction + ", " + (args.object === swipeLabel);
|
||||
swipeLabel.text = "Swipe Direction: " + args.direction + ", " + (args.object === swipeLabel) + getStateAsString(args.state);
|
||||
});
|
||||
|
||||
var observer4 = swipeLabel.getGestureObservers(gestures.GestureTypes.swipe)[0];
|
||||
|
||||
panLabel.on(gestures.GestureTypes.pan, function (args: gestures.PanGestureEventData) {
|
||||
panLabel.text = "Pan deltaX:" + args.deltaX + "; deltaY:" + args.deltaY + ";" + ", " + (args.object === panLabel);
|
||||
panLabel.text = "Pan deltaX:" + Math.round(args.deltaX) + "; deltaY:" + Math.round(args.deltaX) + ";" + ", " + (args.object === panLabel) + getStateAsString(args.state);
|
||||
});
|
||||
|
||||
var observer5 = panLabel.getGestureObservers(gestures.GestureTypes.pan)[0];
|
||||
|
||||
pinchLabel.on(gestures.GestureTypes.pinch, function (args: gestures.PinchGestureEventData) {
|
||||
pinchLabel.text = "Pinch Scale: " + args.scale + ", " + (args.object === pinchLabel);
|
||||
pinchLabel.text = "Pinch Scale: " + Math.round(args.scale) + ", " + (args.object === pinchLabel) + getStateAsString(args.state);
|
||||
});
|
||||
|
||||
var observer6 = pinchLabel.getGestureObservers(gestures.GestureTypes.pinch)[0];
|
||||
|
||||
rotaionLabel.on(gestures.GestureTypes.rotation, function (args: gestures.RotationGestureEventData) {
|
||||
rotaionLabel.text = "Rotation: " + args.rotation + ", " + (args.object === rotaionLabel);
|
||||
rotaionLabel.text = "Rotation: " + Math.round(args.rotation) + ", " + (args.object === rotaionLabel) + getStateAsString(args.state);
|
||||
});
|
||||
|
||||
var observer7 = rotaionLabel.getGestureObservers(gestures.GestureTypes.rotation)[0];
|
||||
@ -107,4 +111,22 @@ export function createPage() {
|
||||
var page = new pages.Page();
|
||||
page.content = stack;
|
||||
return page;
|
||||
}
|
||||
|
||||
var states = new Array<string>();
|
||||
function getStateAsString(state: gestures.GestureStateTypes): string {
|
||||
if (state === gestures.GestureStateTypes.began) {
|
||||
states.length = 0;
|
||||
states.push("began");
|
||||
} else if (state === gestures.GestureStateTypes.cancelled) {
|
||||
states.push("cancelled");
|
||||
} else if (state === gestures.GestureStateTypes.changed) {
|
||||
if (states.indexOf("changed") === -1) {
|
||||
states.push("changed");
|
||||
}
|
||||
} else if (state === gestures.GestureStateTypes.ended) {
|
||||
states.push("ended");
|
||||
}
|
||||
|
||||
return ", states: " + states.join(",");
|
||||
}
|
@ -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