private void SwipeGestureRecognizer_Swiped(object sender, SwipedEventArgs e) { // see if the animation is running if (this.AnimationIsRunning("TransitionAnimation")) { return; } // update the elements UpdateOffScreenElements(); // user has swipped var onScreenHeadingSlideOut = new Animation(v => currentHeading.TranslationX = v, 0, -this.Width, Easing.SinIn); var onScreenHeadingFadeOut = new Animation(v => currentHeading.Opacity = v, 1, 0, Easing.SinIn); var onScreenBodySlideOut = new Animation(v => currentBody.TranslationX = v, 0, -this.Width, Easing.SinIn); var onScreenBodyFadeOut = new Animation(v => currentBody.Opacity = v, 1, 0, Easing.SinIn); var offScreenHeadingSlideIn = new Animation(v => offscreenHeading.TranslationX = v, this.Width, 0, Easing.SinIn); var offScreenHeadingFadeIn = new Animation(v => offscreenHeading.Opacity = v, 0, 1, Easing.SinIn); var offScreenBodySlideIn = new Animation(v => offscreenBody.TranslationX = v, this.Width, 0, Easing.SinIn); var offScreenBodyFadeIn = new Animation(v => offscreenBody.Opacity = v, 0, 1, Easing.SinIn); // animation for skia var skiaAnimation = new Animation( callback: v => { transitionValue = v; ImageSkiaCanvas.InvalidateSurface(); }, start: 0, end: 2); var outgoingImageAnimation = new Animation( callback: v => { outgoingImageOffset = v; ImageSkiaCanvas.InvalidateSurface(); }, start: 0, end: this.Width); var parentAnimation = new Animation(); parentAnimation.Add(0, 1, onScreenHeadingSlideOut); parentAnimation.Add(0, 1, onScreenHeadingFadeOut); parentAnimation.Add(.2, 1, onScreenBodySlideOut); parentAnimation.Add(0, 1, onScreenBodyFadeOut); parentAnimation.Add(0, 1, offScreenHeadingSlideIn); parentAnimation.Add(0, 1, offScreenHeadingFadeIn); parentAnimation.Add(.2, 1, offScreenBodySlideIn); parentAnimation.Add(0, 1, offScreenBodyFadeIn); parentAnimation.Add(0, 1, skiaAnimation); parentAnimation.Add(0.5, 1, outgoingImageAnimation); parentAnimation.Commit(this, "TransitionAnimation", 16, 800, null, (v, c) => { viewModel.MoveNext(); CycleElement(); currentBitmap = offscreenBitmap; }); }
private void MoveNext() { if (this.AnimationIsRunning("TransitionAnimation")) { return; } var screenWidthPixels = ImageSkiaCanvas.CanvasSize.Width; // load up the image we are animating in var screenRect = new SKRect(0, 0, ImageSkiaCanvas.CanvasSize.Width, ImageSkiaCanvas.CanvasSize.Height); offscreenBitmap = CreateAspectCorrectedBitmap(viewModel.NextLocation.ImageResource, screenRect); offscreenHeading.Text = viewModel.NextLocation.Title; offscreenBody.Text = viewModel.NextLocation.Description; offscreenHeading.Opacity = 0; offscreenBody.Opacity = 0; // make sure we are setting the starting locations; bandTranslationValues = GetInitializedArray <double>(numberOfBands, 0); incomingBandTranslationValues = GetInitializedArray <double>(numberOfBands, -screenWidthPixels); var parentAnimation = new Animation(); AddChildAnimationForOutgoing(parentAnimation, Direction.Next); AddChildAnimationsForIncoming(parentAnimation, Direction.Next); AddChildAnimationsForText(parentAnimation, Direction.Next); var skiaAnimation = new Animation( callback: v => { isAnimating = true; ImageSkiaCanvas.InvalidateSurface(); }, start: 0, end: 1, easing: Easing.Linear); parentAnimation.Add(0, 1, skiaAnimation); parentAnimation.Commit(this, "TransitionAnimation", 16, 2000, Easing.SinInOut, (v, c) => { isAnimating = false; viewModel.MoveNext(); CycleElements(); currentBitmap = offscreenBitmap; SideBarCanvas.InvalidateSurface(); }); }
private void SwipeGestureRecognizer_SwipedToLeft(object sender, SwipedEventArgs e) { // see if the animation is running if (this.AnimationIsRunning("TransitionAnimation")) { return; } RightSwap = false; // update the elements UpdateOffScreenElements(viewModel.NextLocation); // move the current stuff off the screen var onscreenHeadingSlideOut = new Animation(v => currentHeading.TranslationX = v, 0, -this.Width, Easing.SinIn); var onscreenHeadingFade = new Animation(v => currentHeading.Opacity = v, 1, 0, Easing.SinIn); var onscreenBodySlideOut = new Animation(v => currentBody.TranslationX = v, 0, -this.Width, Easing.SinIn); var onscreenBodyFade = new Animation(v => currentBody.Opacity = v, 1, 0, Easing.SinIn); // move the offscreen stuff onto the screen var offscreenHeadingSlideIn = new Animation(v => offscreenHeading.TranslationX = v, this.Width, 0, Easing.SinOut); var offscreenHeadingFadeIn = new Animation(v => offscreenHeading.Opacity = v, 0, 1, Easing.SinOut); var offscreenBodySlideIn = new Animation(v => offscreenBody.TranslationX = v, this.Width, 0, Easing.SinOut); var offscreenBodyFade = new Animation(v => offscreenBody.Opacity = v, 0, 1, Easing.SinIn); // animation for skia elements var skiaAnimation = new Animation( callback: v => { transitionValue = v; ImageSkiaCanvas.InvalidateSurface(); }, start: 0, end: 2, easing: Easing.SinInOut); var outgoingImageAnimation = new Animation( callback: v => { outgoingOffset = v; }, start: 0, end: this.Width, easing: Easing.CubicInOut); var parentAnimation = new Animation(); // outgoing child animations parentAnimation.Add(0, 1, onscreenHeadingSlideOut); parentAnimation.Add(0, .5, onscreenHeadingFade); parentAnimation.Add(.2, 1, onscreenBodySlideOut); parentAnimation.Add(0, 1, onscreenBodyFade); // inbound child animations parentAnimation.Add(.2, 1, offscreenHeadingSlideIn); parentAnimation.Add(.2, 1, offscreenHeadingFadeIn); parentAnimation.Add(.4, 1, offscreenBodySlideIn); parentAnimation.Add(.4, 1, offscreenBodyFade); // add skia animations parentAnimation.Add(0, 1, skiaAnimation); parentAnimation.Add(.5, 1, outgoingImageAnimation); parentAnimation.Commit(this, "TransitionAnimation", 16, 750, null, (v, c) => { viewModel.MoveNext(); CycleElements(); currentBitmap = offscreenBitmap; }); }