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;
            });
        }
示例#2
0
        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();
            });
        }
示例#3
0
        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;
            });
        }