Example #1
0
        private void ItemConainer_Loaded(object sender, RoutedEventArgs e)
        {
            var itemPanel     = albumView.ItemsPanelRoot as ItemsWrapGrid;
            var itemContainer = sender as GridViewItem;
            var itemIndex     = albumView.IndexFromContainer(itemContainer);

            if (itemIndex >= itemPanel.FirstVisibleIndex && itemIndex <= itemPanel.LastVisibleIndex)
            {
                //Loading animation
                var itemVisual = ElementCompositionPreview.GetElementVisual(itemContainer);

                float width  = 200;
                float height = 200;
                itemVisual.Size        = new Vector2(width, height);
                itemVisual.CenterPoint = new Vector3(width / 2, height / 2, 0f);
                itemVisual.Opacity     = 0.0f;

                Vector3KeyFrameAnimation scalAnimation = _compositor.CreateVector3KeyFrameAnimation();
                scalAnimation.InsertKeyFrame(0f, new Vector3(0.9f, 0.9f, .9f));
                scalAnimation.InsertKeyFrame(1f, new Vector3(1f, 1f, 0f));
                scalAnimation.Duration = TimeSpan.FromMilliseconds(600);
                var x = itemIndex - itemPanel.FirstVisibleIndex;
                scalAnimation.DelayTime = TimeSpan.FromMilliseconds((itemIndex - itemPanel.FirstVisibleIndex) * 20);

                KeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();
                fadeAnimation.InsertExpressionKeyFrame(1f, "1");
                fadeAnimation.Duration  = TimeSpan.FromMilliseconds(600);
                fadeAnimation.DelayTime = TimeSpan.FromMilliseconds((itemIndex - itemPanel.FirstVisibleIndex) * 20);

                itemVisual.StartAnimation("Scale", scalAnimation);
                itemVisual.StartAnimation("Opacity", fadeAnimation);
            }
            itemContainer.Loaded -= ItemConainer_Loaded;
        }
        private void StartAnimation1(UIElement element, KeyFrameAnimation animation)
        {
            var visual = ElementCompositionPreview.GetElementVisual(element);

            visual.StopAnimation("Translation.Y");
            visual.StartAnimation("Translation.Y", animation);
        }
        internal async static Task AnimatePageOutReverse(Frame frame)
        {
            if (frame.Content is FrameworkElement page)
            {
                if (_compositor == null)
                {
                    _compositor = ElementCompositionPreview.GetElementVisual(page).Compositor;
                }

                var visual = ElementCompositionPreview.GetElementVisual(page);



                string offsetToUse = $"{frame.ActualWidth}";

                KeyFrameAnimation offsetInAnimation = _compositor.CreateScalarKeyFrameAnimation();
                offsetInAnimation.InsertExpressionKeyFrame(1f, offsetToUse);
                offsetInAnimation.Duration = TimeSpan.FromMilliseconds(250);

                KeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();
                fadeAnimation.InsertExpressionKeyFrame(1f, "0");
                fadeAnimation.Duration = TimeSpan.FromMilliseconds(250);

                visual.StartAnimation("Offset.X", offsetInAnimation);
                visual.StartAnimation("Opacity", fadeAnimation);
                await Task.Delay(fadeAnimation.Duration);
            }
        }
        internal async static Task ColorTransitionOut(Frame frame)
        {
            if (frame.Content is Page page)
            {
                if (page.Background != null)
                {
                    frame.Background = page.Background;
                }

                else if (page.Content is Panel panel)
                {
                    if (panel.Background != null)
                    {
                        frame.Background = panel.Background;
                    }
                    else
                    {
                        frame.Background = (SolidColorBrush)Application.Current.Resources[systemBackgroundColourKey];
                    }
                }
                var visual = ElementCompositionPreview.GetElementVisual(page);

                KeyFrameAnimation opacityAnimation = _compositor.CreateScalarKeyFrameAnimation();
                opacityAnimation.InsertExpressionKeyFrame(1f, "0");
                opacityAnimation.Duration = TimeSpan.FromMilliseconds(1000);

                var sv = _compositor.CreateSpriteVisual();
                sv.Brush = _compositor.CreateColorBrush(Colors.LimeGreen);

                visual.StartAnimation("Opacity", opacityAnimation);
                await Task.Delay(333);
            }
        }
Example #5
0
        XElement FromKeyFrameAnimation <T, TExpression>(string name, KeyFrameAnimation <T, TExpression> obj, T?initialValue)
            where T : struct
            where TExpression : Expr.Expression_ <TExpression>
        {
            return(new XElement(name, GetContents()));

            IEnumerable <XObject> GetContents()
            {
                if (obj.Target != null && obj.Target != name)
                {
                    yield return(new XAttribute("Target", obj.Target));
                }

                var keyFramesString = string.Join(", ", obj.KeyFrames.Select(kf => $"({GetKeyFrameValue(kf)}@{kf.Progress})"));

                if (initialValue.HasValue)
                {
                    yield return(new XText($"{initialValue}, {keyFramesString}"));
                }
                else
                {
                    yield return(new XText(keyFramesString));
                }
            }
        }
        internal async static Task AnimatePageIn(Frame frame)
        {
            if (frame.Content is FrameworkElement page)
            {
                if (_compositor == null)
                {
                    _compositor = ElementCompositionPreview.GetElementVisual(page).Compositor;
                }

                var visual = ElementCompositionPreview.GetElementVisual(page);

                visual.Offset  = new Vector3(140, 0, 0);
                visual.Opacity = 0f;
                visual.Scale   = new Vector3(1, 1, 0);

                KeyFrameAnimation offsetInAnimation = _compositor.CreateScalarKeyFrameAnimation();
                offsetInAnimation.InsertExpressionKeyFrame(1f, "0");
                offsetInAnimation.Duration = TimeSpan.FromMilliseconds(250);


                KeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();
                fadeAnimation.InsertExpressionKeyFrame(1f, "1");
                fadeAnimation.Duration = TimeSpan.FromMilliseconds(250);


                visual.StartAnimation("Offset.X", offsetInAnimation);
                visual.StartAnimation("Opacity", fadeAnimation);
                await Task.Delay(fadeAnimation.Duration);
            }
        }
        private void StartAnimation2(UIElement element, KeyFrameAnimation animation2)
        {
            var visual = ElementCompositionPreview.GetElementVisual(element);

            visual.StopAnimation("Offset.Y");
            visual.StartAnimation("Offset.Y", animation2);
        }
 /// <summary>
 /// 将关键帧加入动画。
 /// </summary>
 /// <param name="animation"></param>
 /// <exception cref="InvalidOperationException">错误的动画类型。</exception>
 public override void AddKayFrameToAnimation(KeyFrameAnimation animation)
 {
     if (animation is ScalarKeyFrameAnimation)
     {
         (animation as ScalarKeyFrameAnimation).InsertKeyFrame((float)Progress, (float)(Object)ValueObject, EasingFunction.CreateCompositionEasingFunction(animation.Compositor));
     }
     else if (animation is Vector2KeyFrameAnimation)
     {
         (animation as Vector2KeyFrameAnimation).InsertKeyFrame((float)Progress, (Vector2)(Object)ValueObject, EasingFunction.CreateCompositionEasingFunction(animation.Compositor));
     }
     else if (animation is Vector3KeyFrameAnimation)
     {
         (animation as Vector3KeyFrameAnimation).InsertKeyFrame((float)Progress, (Vector3)(Object)ValueObject, EasingFunction.CreateCompositionEasingFunction(animation.Compositor));
     }
     else if (animation is Vector4KeyFrameAnimation)
     {
         (animation as Vector4KeyFrameAnimation).InsertKeyFrame((float)Progress, (Vector4)(Object)ValueObject, EasingFunction.CreateCompositionEasingFunction(animation.Compositor));
     }
     else if (animation is ColorKeyFrameAnimation)
     {
         (animation as ColorKeyFrameAnimation).InsertKeyFrame((float)Progress, (Color)(Object)ValueObject, EasingFunction.CreateCompositionEasingFunction(animation.Compositor));
     }
     else
     {
         throw new InvalidOperationException("错误的动画类型。");
     }
 }
Example #9
0
        /// <summary>
        /// Inserts a KeyFrame whose value is calculated using the specified ExpressionNode.
        /// </summary>
        /// <param name="keyframeAnimation">The keyframe animation.</param>
        /// <param name="normalizedProgressKey">The time the key frame should occur at, expressed as a percentage of the animation Duration. Allowed value is from 0.0 to 1.0.</param>
        /// <param name="expressionNode">The root ExpressionNode that represents the ExpressionAnimation.</param>
        /// <param name="easing">The easing function to use when interpolating between frames.</param>
        public static void InsertExpressionKeyFrame(this KeyFrameAnimation keyframeAnimation, float normalizedProgressKey, ExpressionNode expressionNode, CompositionEasingFunction easing = null)
        {
#if NETFX_CORE // UNO TODO
            keyframeAnimation.InsertExpressionKeyFrame(normalizedProgressKey, expressionNode.ToExpressionString(), easing);
#endif

            expressionNode.SetAllParameters(keyframeAnimation);
        }
        /// <summary>
        /// Inserts a KeyFrame whose value is calculated using the specified ExpressionNode.
        /// </summary>
        /// <param name="keyframeAnimation">The keyframe animation.</param>
        /// <param name="normalizedProgressKey">The time the key frame should occur at, expressed as a percentage of the animation Duration. Allowed value is from 0.0 to 1.0.</param>
        /// <param name="expressionNode">The root ExpressionNode that represents the ExpressionAnimation.</param>
        /// <param name="easing">The easing function to use when interpolating between frames.</param>
        public static void InsertExpressionKeyFrame(this KeyFrameAnimation keyframeAnimation, float normalizedProgressKey, ExpressionNode expressionNode, CompositionEasingFunction easing = null)
        {
            expressionNode.ClearReferenceInfo();

            keyframeAnimation.InsertExpressionKeyFrame(normalizedProgressKey, expressionNode.ToExpressionString(), easing);

            expressionNode.SetAllParameters(keyframeAnimation);
        }
        internal static KeyFrameAnimation InsertExpressionLambdaKeyFrame(KeyFrameAnimation animation, float normalizedProgressKey, Expression expression)
        {
            var ce = ExpressionToCompositionExpression(expression);

            animation.InsertExpressionKeyFrame(normalizedProgressKey, ce.Expression);

            ApplyParameters(animation, ce.Parameters);
            return(animation);
        }
    private async Task AnimatePageOut()
    {
        var newPage = frame.Content;

        if (newPage != null)
        {
            var page = newPage as FrameworkElement;

            if (_compositor == null)
            {
                _compositor = ElementCompositionPreview.GetElementVisual(page).Compositor;
            }

            var visual = ElementCompositionPreview.GetElementVisual(page);

            //var easeIn = _compositor.CreateCubicBezierEasingFunction(new Vector2(0.5f, 0.0f), new Vector2(1.0f, 1.0f));
            //var step = _compositor.CreateStepEasingFunction();

            //KeyFrameAnimation offsetInAnimation = _compositor.CreateScalarKeyFrameAnimation();
            //offsetInAnimation.InsertExpressionKeyFrame(1f, "-140");
            //offsetInAnimation.Duration = TimeSpan.FromMilliseconds(250);

            //KeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();
            //fadeAnimation.InsertExpressionKeyFrame(1f, "0");
            //fadeAnimation.Duration = TimeSpan.FromMilliseconds(200);

            //visual.StartAnimation("Offset.Y", offsetInAnimation);
            //visual.StartAnimation("Opacity", fadeAnimation);

            int windowHeight = (int)Window.Current.Bounds.Height;
            //visual.Offset = new Vector3(0, windowHeight, 0);
            visual.Opacity = 1f;
            visual.Scale   = new Vector3(1, 1, 0);

            KeyFrameAnimation offsetInAnimation = _compositor.CreateScalarKeyFrameAnimation();
            offsetInAnimation.InsertExpressionKeyFrame(1f, $"{windowHeight}" /*, step*/);
            offsetInAnimation.Duration = TimeSpan.FromMilliseconds(500);


            KeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();
            fadeAnimation.InsertExpressionKeyFrame(1f, "1");
            fadeAnimation.Duration = TimeSpan.FromMilliseconds(1);


            visual.StartAnimation("Offset.Y", offsetInAnimation);
            //visual.StartAnimation("Opacity", fadeAnimation);
            //await page.Fade(1, 250).Offset(0, 140, 250, 0, EasingType.Quadratic).StartAsync();


            await Task.Delay(500); //waits until the animation completes in order to continue


            /*await Task.Delay(250);*/ //waits until the animation completes in order to continue
        }
    }
Example #13
0
 public override void AddKayFrameToAnimation(KeyFrameAnimation animation)
 {
     if (animation is QuaternionKeyFrameAnimation)
     {
         (animation as QuaternionKeyFrameAnimation).InsertKeyFrame((float)Progress, ValueObject, EasingFunction.CreateCompositionEasingFunction(animation.Compositor));
     }
     else
     {
         throw new InvalidOperationException("错误的动画类型。");
     }
 }
        private void ItemContainer_Loaded(object sender, RoutedEventArgs e)
        {
            var itemsPanel    = (ItemsStackPanel)ActivityList.ItemsPanelRoot;
            var itemContainer = (ListViewItem)sender;
            var itemIndex     = ActivityList.IndexFromContainer(itemContainer);

            var uc         = itemContainer.ContentTemplateRoot as FrameworkElement;
            var childPanel = uc.FindName("ActivityListItemPanel") as RelativePanel;

            // Don't animate if we're not in the visible viewport
            if (itemIndex >= itemsPanel.FirstVisibleIndex && itemIndex <= itemsPanel.LastVisibleIndex)
            {
                var itemVisual = ElementCompositionPreview.GetElementVisual(uc);

                float width  = (float)childPanel.RenderSize.Width;
                float height = (float)childPanel.RenderSize.Height;
                itemVisual.Size        = new Vector2(width, height);
                itemVisual.CenterPoint = new Vector3(width / 2, height / 2, 0f);
                itemVisual.Scale       = new Vector3(1, 1, 1); // new Vector3(0.25f, 0.25f, 0);
                itemVisual.Opacity     = 0f;
                itemVisual.Offset      = new Vector3(0, 100, 0);

                var relativeIndex = itemIndex - itemsPanel.FirstVisibleIndex;

                // Create KeyFrameAnimations
                KeyFrameAnimation offsetAnimation = Compositor.CreateScalarKeyFrameAnimation();
                offsetAnimation.InsertExpressionKeyFrame(1f, "0");
                offsetAnimation.Duration  = TimeSpan.FromMilliseconds(1250);
                offsetAnimation.DelayTime = TimeSpan.FromMilliseconds(relativeIndex * 100);

                Vector3KeyFrameAnimation scaleAnimation = Compositor.CreateVector3KeyFrameAnimation();
                scaleAnimation.InsertKeyFrame(0, new Vector3(1f, 1f, 0f));
                scaleAnimation.InsertKeyFrame(0.1f, new Vector3(0.05f, 0.05f, 0.05f));
                scaleAnimation.InsertKeyFrame(1f, new Vector3(1f, 1f, 0f));
                scaleAnimation.Duration  = TimeSpan.FromMilliseconds(1000);
                scaleAnimation.DelayTime = TimeSpan.FromMilliseconds(relativeIndex * 100);

                KeyFrameAnimation fadeAnimation = Compositor.CreateScalarKeyFrameAnimation();
                fadeAnimation.InsertExpressionKeyFrame(1f, "1");
                fadeAnimation.Duration  = TimeSpan.FromMilliseconds(500);
                fadeAnimation.DelayTime = TimeSpan.FromMilliseconds(relativeIndex * 100);

                // Start animations
                itemVisual.StartAnimation("Offset.Y", offsetAnimation);
                itemVisual.StartAnimation("Scale", scaleAnimation);
                itemVisual.StartAnimation("Opacity", fadeAnimation);
            }

            itemContainer.Loaded -= ItemContainer_Loaded;
        }
Example #15
0
        static string GetKeyFrameValue <T>(KeyFrameAnimation <T> .KeyFrame kf)
        {
            switch (kf.Type)
            {
            case KeyFrameAnimation <T> .KeyFrameType.Expression:
                var expressionKeyFrame = (KeyFrameAnimation <T> .ExpressionKeyFrame)kf;
                return($"\"{expressionKeyFrame.Expression}\"");

            case KeyFrameAnimation <T> .KeyFrameType.Value:
                var valueKeyFrame = (KeyFrameAnimation <T> .ValueKeyFrame)kf;
                return(valueKeyFrame.Value.ToString());

            default:
                throw new InvalidOperationException();
            }
        }
    private async Task AnimateScaleIn()
    {
        var newPage = frame.Content;

        if (newPage != null)
        {
            var page = newPage as FrameworkElement;

            if (_compositor == null)
            {
                _compositor = ElementCompositionPreview.GetElementVisual(page).Compositor;
            }



            KeyFrameAnimation scaleAnimation = _compositor.CreateScalarKeyFrameAnimation();
            scaleAnimation.InsertExpressionKeyFrame(0f, ".005");
            //scaleAnimation.InsertExpressionKeyFrame(0.5f, ".8");
            scaleAnimation.InsertExpressionKeyFrame(1f, "1");
            scaleAnimation.Duration = TimeSpan.FromMilliseconds(700);


            KeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();
            fadeAnimation.InsertExpressionKeyFrame(1f, "1");
            fadeAnimation.Duration = TimeSpan.FromMilliseconds(1);

            var visual = ElementCompositionPreview.GetElementVisual(page);
            visual.Opacity = 0; //sets initial opacity to 0, since we will be animating it to 1

            //this loop is needed, so that we don't continue until the page is actually generated (otherwise, the size of the visual gets reported as 0)
            while (visual.Size.X == 0)
            {
                await Task.Delay(1);
            }

            visual.CenterPoint = new Vector3(visual.Size.X / 2, visual.Size.Y / 2, 0); //sets the center point of the visual (this is used as the anchor point of the scale animation)

            visual.StartAnimation("Scale.X", scaleAnimation);
            visual.StartAnimation("Scale.Y", scaleAnimation);
            visual.StartAnimation("Opacity", fadeAnimation);
            CompositionEasingFunction eaze;

            await Task.Delay(700); //waits until the animation completes in order to continue
        }
    }
        public static ImplicitAnimationCollection CreateImplicitAnimation(this ImplicitAnimationCollection source, string Target, TimeSpan?Duration = null)
        {
            KeyFrameAnimation animation = null;

            switch (Target.ToLower())
            {
            case "offset":
            case "scale":
            case "centerPoint":
            case "rotationAxis":
                animation = source.Compositor.CreateVector3KeyFrameAnimation();
                break;

            case "size":
                animation = source.Compositor.CreateVector2KeyFrameAnimation();
                break;

            case "opacity":
            case "blueRadius":
            case "rotationAngle":
            case "rotationAngleInDegrees":
                animation = source.Compositor.CreateScalarKeyFrameAnimation();
                break;

            case "color":
                animation = source.Compositor.CreateColorKeyFrameAnimation();
                break;
            }
            if (animation == null)
            {
                throw new ArgumentNullException("未知的Target");
            }
            if (!Duration.HasValue)
            {
                Duration = TimeSpan.FromSeconds(0.2d);
            }
            animation.InsertExpressionKeyFrame(1f, "this.FinalValue");
            animation.Duration = Duration.Value;
            animation.Target   = Target;

            source[Target] = animation;
            return(source);
        }
Example #18
0
        private void ItemContainer_Loaded(object sender, RoutedEventArgs e)
        {
            var itemsPanel    = (ItemsWrapGrid)this.PhotoCollectionViewer.ItemsPanelRoot;
            var itemContainer = (GridViewItem)sender;

            var itemIndex = this.PhotoCollectionViewer.IndexFromContainer(itemContainer);

            var relativeIndex = itemIndex - itemsPanel.FirstVisibleIndex;

            var uc = itemContainer.ContentTemplateRoot as Grid;

            if (itemIndex != persistedItemIndex && itemIndex >= 0 && itemIndex >= itemsPanel.FirstVisibleIndex && itemIndex <= itemsPanel.LastVisibleIndex)
            {
                var itemVisual = ElementCompositionPreview.GetElementVisual(uc);
                ElementCompositionPreview.SetIsTranslationEnabled(uc, true);

                // Create KeyFrameAnimations
                KeyFrameAnimation offsetAnimation = _compositor.CreateScalarKeyFrameAnimation();
                offsetAnimation.InsertExpressionKeyFrame(0f, "100");
                offsetAnimation.InsertExpressionKeyFrame(1f, "0");
                offsetAnimation.DelayBehavior = AnimationDelayBehavior.SetInitialValueBeforeDelay;
                offsetAnimation.Duration      = TimeSpan.FromMilliseconds(1800);
                offsetAnimation.DelayTime     = TimeSpan.FromMilliseconds(relativeIndex * 50);

                KeyFrameAnimation fadeAnimation = _compositor.CreateScalarKeyFrameAnimation();
                fadeAnimation.InsertExpressionKeyFrame(0f, "0");
                fadeAnimation.InsertExpressionKeyFrame(1f, "1");
                fadeAnimation.DelayBehavior = AnimationDelayBehavior.SetInitialValueBeforeDelay;
                fadeAnimation.Duration      = TimeSpan.FromMilliseconds(1800);
                fadeAnimation.DelayTime     = TimeSpan.FromMilliseconds(relativeIndex * 50);

                // Start animations
                itemVisual.StartAnimation("Offset.Y", offsetAnimation);
                //itemVisual.StartAnimation("Scale", scaleAnimation);
                itemVisual.StartAnimation("Opacity", fadeAnimation);
            }
            else
            {
                Debug.WriteLine("sss");
            }

            itemContainer.Loaded -= this.ItemContainer_Loaded;
        }
            public bool TryInsertExpressionKeyFrame(KeyFrameAnimation animation, TimeSpan duration)
            {
                if (this.expression is null)
                {
                    return(false);
                }

                CompositionEasingFunction?easingFunction = animation.Compositor.TryCreateEasingFunction(EasingType, EasingMode);

                if (easingFunction is null)
                {
                    animation.InsertExpressionKeyFrame(GetNormalizedProgress(duration), this.expression);
                }
                else
                {
                    animation.InsertExpressionKeyFrame(GetNormalizedProgress(duration), this.expression, easingFunction);
                }

                return(true);
            }
Example #20
0
        public static void CreateAnimation(CompositionObject obj, string Target, TimeSpan Duration)
        {
            var compositor = obj.Compositor;

            KeyFrameAnimation an = null;
            if (ScalarTargets.Contains(Target)) an = compositor.CreateScalarKeyFrameAnimation();
            if (Vector2Targets.Contains(Target)) an = compositor.CreateVector2KeyFrameAnimation();
            if (Vector3Targets.Contains(Target)) an = compositor.CreateVector3KeyFrameAnimation();
            if (Vector4Targets.Contains(Target)) an = compositor.CreateVector4KeyFrameAnimation();
            if (QuaternionTargets.Contains(Target)) an = compositor.CreateQuaternionKeyFrameAnimation();
            if (ColorTargets.Contains(Target)) an = compositor.CreateColorKeyFrameAnimation();
            if (an == null) return;
            an.InsertExpressionKeyFrame(1f, "this.FinalValue");
            an.Duration = Duration;
            an.Target = Target;
            if (obj.ImplicitAnimations == null)
            {
                obj.ImplicitAnimations = compositor.CreateImplicitAnimationCollection();
            }
            obj.ImplicitAnimations[Target] = an;
        }
Example #21
0
        public static void CreateAnimation<T>(CompositionObject obj, string Target, TimeSpan Duration) where T : struct
        {
            var compositor = obj.Compositor;

            KeyFrameAnimation an = null;
            if (typeof(T) == typeof(float)) an = compositor.CreateScalarKeyFrameAnimation();
            if (typeof(T) == typeof(Vector2)) an = compositor.CreateVector2KeyFrameAnimation();
            if (typeof(T) == typeof(Vector3)) an = compositor.CreateVector3KeyFrameAnimation();
            if (typeof(T) == typeof(Vector4)) an = compositor.CreateVector4KeyFrameAnimation();
            if (typeof(T) == typeof(Quaternion)) an = compositor.CreateQuaternionKeyFrameAnimation();
            if (typeof(T) == typeof(Color)) an = compositor.CreateColorKeyFrameAnimation();
            if (an == null) return;
            an.InsertExpressionKeyFrame(1f, "this.FinalValue");
            an.Duration = Duration;
            an.Target = Target;
            if (obj.ImplicitAnimations == null)
            {
                obj.ImplicitAnimations = compositor.CreateImplicitAnimationCollection();
            }
            obj.ImplicitAnimations[Target] = an;
        }
        internal async static Task FastSlideOutReverse(Frame frame)
        {
            if (frame.Content is Page page)
            {
                if (page.Background != null)
                {
                    frame.Background = page.Background;
                }

                else if (page.Content is Panel panel)
                {
                    if (panel.Background != null)
                    {
                        frame.Background = panel.Background;
                    }
                    else
                    {
                        frame.Background = (SolidColorBrush)Application.Current.Resources[systemBackgroundColourKey];
                    }
                }

                if (_compositor == null)
                {
                    _compositor = ElementCompositionPreview.GetElementVisual(page).Compositor;
                }

                var visual = ElementCompositionPreview.GetElementVisual(page);


                KeyFrameAnimation offsetInAnimation = _compositor.CreateScalarKeyFrameAnimation();

                string offsetToUse = $"{140}";
                offsetInAnimation.InsertExpressionKeyFrame(1f, offsetToUse);
                offsetInAnimation.Duration = TimeSpan.FromMilliseconds(300);


                visual.StartAnimation("Offset.X", offsetInAnimation);
                await Task.Delay(100);
            }
        }
        internal async static Task FastSlideInReverse(Frame frame)
        {
            if (frame.Content is Page page)
            {
                if (_compositor == null)
                {
                    _compositor = ElementCompositionPreview.GetElementVisual(page).Compositor;
                }

                var visual = ElementCompositionPreview.GetElementVisual(page);
                visual.Offset = new Vector3(-((float)frame.ActualWidth - 140), 0, 0);

                KeyFrameAnimation offsetInAnimation = _compositor.CreateScalarKeyFrameAnimation();
                offsetInAnimation.InsertExpressionKeyFrame(1f, "0");
                offsetInAnimation.Duration = TimeSpan.FromMilliseconds(300);



                visual.StartAnimation("Offset.X", offsetInAnimation);
                await Task.Delay(offsetInAnimation.Duration);
            }
        }
        internal async static Task ColorTransitionIn(Frame frame)
        {
            if (frame.Content is Page page)
            {
                if (_compositor == null)
                {
                    _compositor = ElementCompositionPreview.GetElementVisual(page).Compositor;
                }

                var visual = ElementCompositionPreview.GetElementVisual(page);

                visual.Opacity = 0f;



                KeyFrameAnimation opacityAnimation = _compositor.CreateScalarKeyFrameAnimation();
                opacityAnimation.InsertExpressionKeyFrame(1f, "1");
                opacityAnimation.Duration = TimeSpan.FromMilliseconds(1000);

                visual.StartAnimation("Opacity", opacityAnimation);
                await Task.Delay(opacityAnimation.Duration);
            }
        }
Example #25
0
        private void ItemContainer_Loaded(object sender, RoutedEventArgs e)
        {
            var itemsPanel    = (ItemsWrapGrid)gridviewImages.ItemsPanelRoot;
            var itemContainer = (GridViewItem)sender;
            var itemIndex     = gridviewImages.IndexFromContainer(itemContainer);

            var uc = itemContainer.ContentTemplateRoot as FrameworkElement;

            //Debug.WriteLine(itemContainer.ActualWidth);
            //Debug.WriteLine(itemContainer.ActualHeight);

            //Don't animate if we're not in the visible viewport
            if (itemIndex >= itemsPanel.FirstVisibleIndex && itemIndex <= itemsPanel.LastVisibleIndex)
            {
                var itemVisual = ElementCompositionPreview.GetElementVisual(uc);

                float width  = (float)itemContainer.ActualWidth;
                float height = (float)itemContainer.ActualHeight;
                itemVisual.Size        = new Vector2(width, height);
                itemVisual.CenterPoint = new Vector3(width / 2, height / 2, 1); //GetCenterPoint2(itemContainer, itemContainer.ActualWidth);
                itemVisual.Offset      = new Vector3(0, 25, 0);
                itemVisual.Scale       = new Vector3(1, 1, 0);

                var relativeIndex = itemIndex - itemsPanel.FirstVisibleIndex;

                // Create KeyFrameAnimations

                KeyFrameAnimation scaleXAnimation = compositor.CreateScalarKeyFrameAnimation();
                scaleXAnimation.InsertExpressionKeyFrame(1f, "0", compositor.CreateCubicBezierEasingFunction(new Vector2(0, 0), new Vector2(0.58f, 1)));
                scaleXAnimation.Duration = TimeSpan.FromMilliseconds(200);

                // Start animations
                itemVisual.StartAnimation("Offset.Y", scaleXAnimation);
            }

            itemContainer.Loaded -= ItemContainer_Loaded;
        }
        /// <summary>
        /// Initialize all Composition related stuff here (Compositor, Animations etc)
        /// </summary>
        private void InitializeComposition()
        {
            var rootVisual = ElementCompositionPreview.GetElementVisual(this);

            // Compositor
            _compositor = rootVisual.Compositor;
            // Composition Generator
            _generator = CompositionGeneratorFactory.GetCompositionGenerator(_compositor);

            // Final Value Expressions
            var vector3Expr = _compositor.CreateFinalValueExpression <Vector3>();
            var scalarExpr  = _compositor.CreateFinalValueExpression <float>();

            // Opacity Animation
            var opacityAnimation = _compositor.CreateKeyFrameAnimation <float>()
                                   .HavingDuration(DefaultOpacityAnimationDuration)
                                   .ForTarget(() => rootVisual.Opacity);

            opacityAnimation.InsertExpressionKeyFrame(1f, scalarExpr);

            // Scale Animation
            var scaleAnimation = _compositor.CreateKeyFrameAnimation <Vector3>()
                                 .HavingDuration(DefaultScaleAnimationDuration)
                                 .ForTarget(() => rootVisual.Scale);

            scaleAnimation.InsertExpressionKeyFrame(1f, vector3Expr);

            // ImplicitAnimation
            _implicitAnimationCollection            = _compositor.CreateImplicitAnimationCollection();
            _implicitAnimationCollection["Opacity"] = opacityAnimation.Animation;
            _implicitAnimationCollection["Scale"]   = scaleAnimation.Animation;

            // Expand Animations
            _expandLeftInset = _compositor.CreateKeyFrameAnimation <float>()
                               .HavingDuration(InsetAnimationDuration)
                               .DelayBy(InsetAnimationDelayDuration);

            _expandLeftInset.InsertKeyFrame(1f, 0);

            _expandRightInset = _compositor.CreateKeyFrameAnimation <float>()
                                .HavingDuration(InsetAnimationDuration)
                                .DelayBy(InsetAnimationDelayDuration);

            _expandInsetClip = _compositor.CreateKeyFrameAnimation <float>()
                               .HavingDuration(InsetClipAnimationDuration);

            _expandInsetClip.InsertKeyFrame(1f, 0);

            // Collapse Animations
            _collapseLeftInset = _compositor.CreateKeyFrameAnimation <float>()
                                 .HavingDuration(InsetAnimationDuration);

            _collapseRightInset = _compositor.CreateKeyFrameAnimation <float>()
                                  .HavingDuration(InsetAnimationDuration);

            _collapseInsetClip = _compositor.CreateKeyFrameAnimation <float>()
                                 .HavingDuration(InsetClipAnimationDuration);

            // Root Container
            _rootContainer = _compositor.CreateContainerVisual();

            // Background Layer
            _bgLayer             = _compositor.CreateLayerVisual();
            _bgLayer.Size        = _rootContainer.Size;
            _bgLayer.CenterPoint = new Vector3(_bgLayer.Size * 0.5f, 0);

            // Top Layer
            _topLayer      = _compositor.CreateLayerVisual();
            _topLayer.Size = _rootContainer.Size;

            _rootContainer.Children.InsertAtBottom(_bgLayer);
            _rootContainer.Children.InsertAtTop(_topLayer);

            // Add the rootContainer to the visual tree
            ElementCompositionPreview.SetElementChildVisual(this, _rootContainer);
        }
Example #27
0
        private async void OnPageLoaded(object sender, RoutedEventArgs e)
        {
            _compositor = Window.Current.Compositor;
            _generator  = _compositor.CreateCompositionGenerator();
            var gridSize = new Vector2((float)RootGrid.ActualWidth, (float)RootGrid.ActualHeight);
            var anim     = _compositor.CreatePathKeyFrameAnimation();

            _rootVisual      = _compositor.CreateSpriteVisual();
            _rootVisual.Size = gridSize;

            // Create the surface brush from the image
            var imageSurface = await _generator.CreateImageSurfaceAsync(
                new Uri("ms-appx:///Assets/Images/Cat.png"),
                new Size(400, 400),
                ImageSurfaceOptions.Default);

            var imageBrush = _compositor.CreateSurfaceBrush(imageSurface);

            // Create the clipped visuals
            for (var i = 0; i < 145; i++)
            {
                var visual = _compositor.CreateSpriteVisual();
                visual.Offset      = new Vector3(400, 400, 0);
                visual.Size        = new Vector2(400, 400);
                visual.Brush       = imageBrush;
                visual.AnchorPoint = new Vector2(0.5f);
                var radius = 290 - (i * 2);
                // Create the GeometricClip for this visual
                var clipGeometry = CanvasGeometry.CreateCircle(null, new Vector2(200, 200), radius);
                visual.Clip = _compositor.CreateGeometricClip(clipGeometry);

                _rootVisual.Children.InsertAtTop(visual);
                _visuals.Add(visual);
            }

            // Display the rootVisual
            ElementCompositionPreview.SetElementChildVisual(RootGrid, _rootVisual);

            // Reverse the visuals list so that the items in the list are now sorted
            // in z-order from top to bottom
            _visuals.Reverse();
            // The topmost visual would track the pointer position
            _dragVisual = _visuals.First();

            // Get the CompositionPropertySet which tracks the pointer position on the RootGrid
            _pointerTrackerSet = ElementCompositionPreview.GetPointerPositionPropertySet(RootGrid);
            // Animate the topmost visual so that it tracks and follows the pointer position
            _pointerTrackerAnimation = _compositor.GenerateVector3KeyFrameAnimation()
                                       .HavingDuration(PointerTrackerAnimationDuration)
                                       .RepeatsForever();

            _pointerTrackerAnimation.InsertExpressionKeyFrame(0f, c => new VisualTarget().Offset);
            _pointerTrackerAnimation.InsertExpressionKeyFrame(
                1f,
                c => c.Lerp(new VisualTarget().Offset, _pointerTrackerSet.Get <Vector3>("Position"), DefaultLerpAmount),
                _compositor.CreateEaseOutQuinticEasingFunction());

            // Animate the remaining visuals in such a way that each visual tracks and follows the
            // position of the visual above it.
            var prevChild = _dragVisual;

            foreach (var child in _visuals.Skip(1))
            {
                var offsetAnimation = _compositor.GenerateVector3KeyFrameAnimation()
                                      .HavingDuration(ChildOffsetAnimationDuration)
                                      .RepeatsForever();

                offsetAnimation.InsertExpressionKeyFrame(0f, c => new VisualTarget().Offset);
                offsetAnimation.InsertExpressionKeyFrame(
                    1f,
                    c => c.Lerp(new VisualTarget().Offset, prevChild.Offset, DefaultLerpAmount),
                    _compositor.CreateEaseOutQuinticEasingFunction());

                child.StartAnimation(() => child.Offset, offsetAnimation);

                prevChild = child;
            }
        }
 public override void AddKayFrameToAnimation(KeyFrameAnimation animation)
 {
     animation.InsertExpressionKeyFrame((float)Progress, Expression, EasingFunction.CreateCompositionEasingFunction(animation.Compositor));
 }
Example #29
0
 // Returns the value from the given keyframe, or null.
 static T?ValueFromKeyFrame <T>(KeyFrameAnimation <T> .KeyFrame kf)
     where T : struct
 {
     return(kf is KeyFrameAnimation <T> .ValueKeyFrame valueKf ? (T?)valueKf.Value : null);
 }
 /// <inheritdoc/>
 protected override void InsertKeyFrameToTypedAnimation(KeyFrameAnimation animation, Vector2KeyFrame keyFrame)
 {
     (animation as Vector2KeyFrameAnimation).InsertKeyFrame((float)keyFrame.Key, keyFrame.Value.ToVector2());
 }
Example #31
0
 public virtual void AddKayFrameToAnimation(KeyFrameAnimation animation)
 {
     throw new NotImplementedException("未提供加入关键帧的方法。");
 }
 public virtual void AddKayFrameToAnimation(KeyFrameAnimation animation)
 {
     throw new NotImplementedException("未提供加入关键帧的方法。");
 }
        /// <summary>
        /// Initialize all Composition related stuff here (Compositor, Animations etc)
        /// </summary>
        private void InitializeComposition()
        {
            var rootVisual = ElementCompositionPreview.GetElementVisual(this);
            // Compositor
            _compositor = rootVisual.Compositor;
            // Composition Generator
            _generator = CompositionGeneratorFactory.GetCompositionGenerator(_compositor);

            // Final Value Expressions
            var vector3Expr = _compositor.CreateFinalValueExpression<Vector3>();
            var scalarExpr = _compositor.CreateFinalValueExpression<float>();

            // Opacity Animation
            var opacityAnimation = _compositor.CreateKeyFrameAnimation<float>()
                                              .HavingDuration(DefaultOpacityAnimationDuration)
                                              .ForTarget(() => rootVisual.Opacity);
            opacityAnimation.InsertExpressionKeyFrame(1f, scalarExpr);

            // Scale Animation
            var scaleAnimation = _compositor.CreateKeyFrameAnimation<Vector3>()
                                            .HavingDuration(DefaultScaleAnimationDuration)
                                            .ForTarget(() => rootVisual.Scale);
            scaleAnimation.InsertExpressionKeyFrame(1f, vector3Expr);

            // ImplicitAnimation
            _implicitAnimationCollection = _compositor.CreateImplicitAnimationCollection();
            _implicitAnimationCollection["Opacity"] = opacityAnimation.Animation;
            _implicitAnimationCollection["Scale"] = scaleAnimation.Animation;

            // Expand Animations
            _expandLeftInset = _compositor.CreateKeyFrameAnimation<float>()
                                          .HavingDuration(InsetAnimationDuration)
                                          .DelayBy(InsetAnimationDelayDuration);

            _expandLeftInset.InsertKeyFrame(1f, 0);

            _expandRightInset = _compositor.CreateKeyFrameAnimation<float>()
                                           .HavingDuration(InsetAnimationDuration)
                                           .DelayBy(InsetAnimationDelayDuration);

            _expandInsetClip = _compositor.CreateKeyFrameAnimation<float>()
                                          .HavingDuration(InsetClipAnimationDuration);

            _expandInsetClip.InsertKeyFrame(1f, 0);

            // Collapse Animations
            _collapseLeftInset = _compositor.CreateKeyFrameAnimation<float>()
                                            .HavingDuration(InsetAnimationDuration);

            _collapseRightInset = _compositor.CreateKeyFrameAnimation<float>()
                                             .HavingDuration(InsetAnimationDuration);

            _collapseInsetClip = _compositor.CreateKeyFrameAnimation<float>()
                                            .HavingDuration(InsetClipAnimationDuration);

            // Root Container
            _rootContainer = _compositor.CreateContainerVisual();

            // Background Layer
            _bgLayer = _compositor.CreateLayerVisual();
            _bgLayer.Size = _rootContainer.Size;
            _bgLayer.CenterPoint = new Vector3(_bgLayer.Size * 0.5f, 0);

            // Top Layer
            _topLayer = _compositor.CreateLayerVisual();
            _topLayer.Size = _rootContainer.Size;

            _rootContainer.Children.InsertAtBottom(_bgLayer);
            _rootContainer.Children.InsertAtTop(_topLayer);

            // Add the rootContainer to the visual tree
            ElementCompositionPreview.SetElementChildVisual(this, _rootContainer);
        }