CompositionAnimationHelper.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System;
  2. using Avalonia.Rendering.Composition;
  3. using Avalonia.Rendering.Composition.Animations;
  4. namespace SukiUI.Helpers
  5. {
  6. public class CompositionAnimationHelper
  7. {
  8. public static void MakeScrollable(CompositionVisual compositionVisual, double millis = 250)
  9. {
  10. if (compositionVisual == null)
  11. return;
  12. Compositor compositor = compositionVisual.Compositor;
  13. var animationGroup = compositor.CreateAnimationGroup();
  14. Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();
  15. offsetAnimation.Target = "Offset";
  16. offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  17. offsetAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  18. ImplicitAnimationCollection implicitAnimationCollection = compositor.CreateImplicitAnimationCollection();
  19. animationGroup.Add(offsetAnimation);
  20. implicitAnimationCollection["Offset"] = animationGroup;
  21. compositionVisual.ImplicitAnimations = implicitAnimationCollection;
  22. }
  23. public static void MakeOpacityAnimated(CompositionVisual compositionVisual, double millis = 700)
  24. {
  25. if (compositionVisual == null)
  26. return;
  27. Compositor compositor = compositionVisual.Compositor;
  28. var animationGroup = compositor.CreateAnimationGroup();
  29. ScalarKeyFrameAnimation opacityAnimation = compositor.CreateScalarKeyFrameAnimation();
  30. opacityAnimation.Target = "Opacity";
  31. opacityAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  32. opacityAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  33. Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();
  34. offsetAnimation.Target = "Offset";
  35. offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  36. offsetAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  37. animationGroup.Add(offsetAnimation);
  38. animationGroup.Add(opacityAnimation);
  39. ImplicitAnimationCollection implicitAnimationCollection = compositor.CreateImplicitAnimationCollection();
  40. implicitAnimationCollection["Opacity"] = animationGroup;
  41. implicitAnimationCollection["Offset"] = animationGroup;
  42. compositionVisual.ImplicitAnimations = implicitAnimationCollection;
  43. }
  44. public static void MakeSizeAnimated(CompositionVisual compositionVisual, double millis =450)
  45. {
  46. if (compositionVisual == null)
  47. return;
  48. Compositor compositor = compositionVisual.Compositor;
  49. var animationGroup = compositor.CreateAnimationGroup();
  50. Vector2KeyFrameAnimation sizeAnimation = compositor.CreateVector2KeyFrameAnimation();
  51. sizeAnimation.Target = "Size";
  52. sizeAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  53. sizeAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  54. Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();
  55. offsetAnimation.Target = "Offset";
  56. offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  57. offsetAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  58. animationGroup.Add(sizeAnimation);
  59. animationGroup.Add(offsetAnimation);
  60. ImplicitAnimationCollection implicitAnimationCollection = compositor.CreateImplicitAnimationCollection();
  61. implicitAnimationCollection["Size"] = animationGroup;
  62. implicitAnimationCollection["Offset"] = animationGroup;
  63. compositionVisual.ImplicitAnimations = implicitAnimationCollection;
  64. }
  65. public static void MakeSizeOpacityAnimated(CompositionVisual compositionVisual, double millis =450)
  66. {
  67. if (compositionVisual == null)
  68. return;
  69. Compositor compositor = compositionVisual.Compositor;
  70. var animationGroup = compositor.CreateAnimationGroup();
  71. Vector2KeyFrameAnimation sizeAnimation = compositor.CreateVector2KeyFrameAnimation();
  72. sizeAnimation.Target = "Size";
  73. sizeAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  74. sizeAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  75. Vector3KeyFrameAnimation offsetAnimation = compositor.CreateVector3KeyFrameAnimation();
  76. offsetAnimation.Target = "Offset";
  77. offsetAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  78. offsetAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  79. ScalarKeyFrameAnimation opacityAnimation = compositor.CreateScalarKeyFrameAnimation();
  80. opacityAnimation.Target = "Opacity";
  81. opacityAnimation.InsertExpressionKeyFrame(1.0f, "this.FinalValue");
  82. opacityAnimation.Duration = TimeSpan.FromMilliseconds(millis);
  83. animationGroup.Add(sizeAnimation);
  84. animationGroup.Add(opacityAnimation);
  85. animationGroup.Add(offsetAnimation);
  86. ImplicitAnimationCollection implicitAnimationCollection = compositor.CreateImplicitAnimationCollection();
  87. implicitAnimationCollection["Size"] = animationGroup;
  88. implicitAnimationCollection["Opacity"] = animationGroup;
  89. implicitAnimationCollection["Offset"] = animationGroup;
  90. compositionVisual.ImplicitAnimations = implicitAnimationCollection;
  91. }
  92. }
  93. }