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 TapGestureRecognizer_Tapped(object sender, EventArgs e) { // see if the animation is running if (this.AnimationIsRunning("TransitionAnimation")) { return; } var screenWidthPixels = ImageSkiaCanvas.CanvasSize.Width; // Get the actual pixels // make sure we are all starting at 0; bandTranslationValues = new double[numberOfBands]; var parentAnimation = new Animation(); // create animation for each band parentAnimation.Add(.5, .95, new Animation(v => bandTranslationValues[0] = v, 0, -screenWidthPixels, Easing.SinInOut)); parentAnimation.Add(.35, .90, new Animation(v => bandTranslationValues[1] = v, 0, -screenWidthPixels, Easing.SinInOut)); parentAnimation.Add(.25, .85, new Animation(v => bandTranslationValues[2] = v, 0, -screenWidthPixels, Easing.SinInOut)); parentAnimation.Add(.15, .8, new Animation(v => bandTranslationValues[3] = v, 0, -screenWidthPixels, Easing.SinInOut)); parentAnimation.Add(0, .75, new Animation(v => bandTranslationValues[4] = v, 0, -screenWidthPixels, Easing.SinInOut)); var skiaAnimation = new Animation( callback: v => { isAnimating = true; ImageSkiaCanvas.InvalidateSurface(); }, start: 0, end: screenWidthPixels, easing: Easing.SinInOut); parentAnimation.Add(0, 1, skiaAnimation); parentAnimation.Commit(this, "TransitionAnimation", 16, 2000, Easing.SinInOut, (v, c) => { isAnimating = false; }); }
private void SwipeGestureRecognizer_SwipedToRight(object sender, SwipedEventArgs e) { // see if the animation is running if (this.AnimationIsRunning("TransitionAnimation")) { return; } RightSwap = true; // update the elements UpdateOffScreenElements(viewModel.PreviousLocation); // 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: 2, end: 0, 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.MovePrevious(); CycleElements(); currentBitmap = offscreenBitmap; }); }