Files
NativeScript/nativescript-core/ui/transition/slide-transition.android.ts
Nathan Walker da3c0b973d chore: format
2020-07-11 11:01:40 -07:00

129 lines
3.6 KiB
TypeScript

import * as transition from ".";
import * as platform from "../../platform";
import lazy from "../../utils/lazy";
const screenWidth = lazy(() => platform.screen.mainScreen.widthPixels);
const screenHeight = lazy(() => platform.screen.mainScreen.heightPixels);
export class SlideTransition extends transition.Transition {
private _direction: string;
constructor(direction: string, duration: number, curve: any) {
super(duration, curve);
this._direction = direction;
}
public createAndroidAnimator(
transitionType: string
): android.animation.Animator {
const translationValues = Array.create("float", 2);
switch (this._direction) {
case "left":
switch (transitionType) {
case transition.AndroidTransitionType.enter:
translationValues[0] = screenWidth();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.exit:
translationValues[0] = 0;
translationValues[1] = -screenWidth();
break;
case transition.AndroidTransitionType.popEnter:
translationValues[0] = -screenWidth();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.popExit:
translationValues[0] = 0;
translationValues[1] = screenWidth();
break;
}
break;
case "right":
switch (transitionType) {
case transition.AndroidTransitionType.enter:
translationValues[0] = -screenWidth();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.exit:
translationValues[0] = 0;
translationValues[1] = screenWidth();
break;
case transition.AndroidTransitionType.popEnter:
translationValues[0] = screenWidth();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.popExit:
translationValues[0] = 0;
translationValues[1] = -screenWidth();
break;
}
break;
case "top":
switch (transitionType) {
case transition.AndroidTransitionType.enter:
translationValues[0] = screenHeight();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.exit:
translationValues[0] = 0;
translationValues[1] = -screenHeight();
break;
case transition.AndroidTransitionType.popEnter:
translationValues[0] = -screenHeight();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.popExit:
translationValues[0] = 0;
translationValues[1] = screenHeight();
break;
}
break;
case "bottom":
switch (transitionType) {
case transition.AndroidTransitionType.enter:
translationValues[0] = -screenHeight();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.exit:
translationValues[0] = 0;
translationValues[1] = screenHeight();
break;
case transition.AndroidTransitionType.popEnter:
translationValues[0] = screenHeight();
translationValues[1] = 0;
break;
case transition.AndroidTransitionType.popExit:
translationValues[0] = 0;
translationValues[1] = -screenHeight();
break;
}
break;
}
let prop;
if (this._direction === "left" || this._direction === "right") {
prop = "translationX";
} else {
prop = "translationY";
}
const animator = android.animation.ObjectAnimator.ofFloat(
null,
prop,
translationValues
);
const duration = this.getDuration();
if (duration !== undefined) {
animator.setDuration(duration);
}
animator.setInterpolator(this.getCurve());
return animator;
}
public toString(): string {
return `${super.toString()} ${this._direction}`;
}
}