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); } }
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("错误的动画类型。"); } }
/// <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 } }
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; }
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); }
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); }
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; }
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); } }
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); }
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)); }
// 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()); }
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); }