zoukankan      html  css  js  c++  java
  • WPF后台动画DoubleAnimation讲解

    WPF后台动画,使用DoubleAnimation做的。

    1.移动动画

    需要参数(目标点离最上边的位置,目标点离最左边的位置,元素名称)

    Image mImage = new Image();

    FloatInElement(100,100,mImage);

     1 /// <summary>
     2         /// 移动动画 
     3         /// </summary>
     4         /// <param name="top">目标点相对于上端的位置</param>
     5         /// <param name="left">目标点相对于左端的位置</param>
     6         /// <param name="elem">移动元素</param>
     7         public static void FloatInElement(double top, double left, UIElement elem)
     8         {
     9             try
    10             {
    11                 DoubleAnimation floatY = new DoubleAnimation()
    12                 {
    13                     To = TransValueFromHeight(top),
    14                     Duration = new TimeSpan(0, 0, 0, 1, 0),
    15                 };
    16                 DoubleAnimation floatX = new DoubleAnimation()
    17                 {
    18                     To = TransValueFromWidth(left),
    19                     Duration = new TimeSpan(0, 0, 0, 1, 0),
    20                 };
    21                 
    22                 elem.BeginAnimation(Canvas.TopProperty, floatY);
    23                 elem.BeginAnimation(Canvas.LeftProperty, floatX);
    24             }
    25             catch (Exception)
    26             {
    27 
    28                 throw;
    29             }
    30         }

    2.透明度动画

    需要参数(元素名称,需要到达的透明度)

    Image mImage = new Image();

    FloatInElement(mImage,0);

     1 /// <summary>
     2         /// 透明度动画 
     3         /// </summary>
     4         /// <param name="elem"></param>
     5         /// <param name="to"></param>
     6         public static void FloatElement(UIElement elem, double to)
     7         {
     8             lock (elem)
     9             {
    10                 if (to == 1)
    11                 {
    12                     elem.Visibility = Visibility.Visible;
    13                 }
    14                 DoubleAnimation opacity = new DoubleAnimation()
    15                 {
    16                     To = to,
    17                     Duration = new TimeSpan(0, 0, 0, 1, 0)
    18                 };
    19                 EventHandler handler = null;
    20                 opacity.Completed += handler = (s, e) =>
    21                 {
    22                     opacity.Completed -= handler;
    23                     if (to == 0)
    24                     {
    25                         elem.Visibility = Visibility.Collapsed;
    26                     }
    27                     opacity = null;
    28                 };
    29                 elem.BeginAnimation(UIElement.OpacityProperty, opacity);
    30             }
    31         }

    3.缓动动画-缩放动画

    需要参数(控件名称,元素开始的位置,开始大小,目标大小)

    Image mImage = new Image();

    ScaleEasingAnimationShow(mImage,new Point(0.5,0.5),1,0);

    元素开始的位置是从new Point(0,0)到new Point(1,1),左上角为(0,0)、右下角为(1,1),控件大小范围为(1,0) 1为控件本身大小,0 为控件缩放完,不显示。

    如果要改动画类型,则改EasingMode = EasingMode.EaseOut

     1 /// <summary>
     2         /// 用户控件是的动画
     3         /// </summary>
     4         /// <param name="element">控件名</param>
     5         /// <param name="point">元素开始动画的位置</param>
     6         /// <param name="from">元素开始的大小</param>
     7         /// <param name="from">元素到达的大小</param>
     8         public static void ScaleEasingAnimationShow(FrameworkElement element, Point point, double from, double to)
     9         {
    10             lock (element)
    11             {
    12                 ScaleTransform scale = new ScaleTransform();
    13                 element.RenderTransform = scale;
    14                 element.RenderTransformOrigin = point;//定义圆心位置        
    15                 EasingFunctionBase easeFunction = new PowerEase()
    16                 {
    17                     EasingMode = EasingMode.EaseOut,
    18                     Power = 5
    19                 };
    20                 DoubleAnimation scaleAnimation = new DoubleAnimation()
    21                 {
    22                     From = from,                                   //起始值
    23                     To = to,                                     //结束值
    24                     EasingFunction = easeFunction,                    //缓动函数
    25                     Duration = new TimeSpan(0, 0, 0, 1, 0)  //动画播放时间
    26                 };
    27                 AnimationClock clock = scaleAnimation.CreateClock();
    28                 scale.ApplyAnimationClock(ScaleTransform.ScaleXProperty, clock);
    29                 scale.ApplyAnimationClock(ScaleTransform.ScaleYProperty, clock);
    30             }
    31         }
  • 相关阅读:
    PHP-FPM 不完全指南
    【权限设计】如何以“权限”为单位的进行权限设计(二)
    【权限设计】如何以“用户”为单位的进行权限设计(一)
    【权限设计】一个案例,三个角色,简单说下B端产品的权限设计
    gdb调试报错:Missing separate debuginfos, use: debuginfo-install glibc-XXX
    java之 ------ 文件拷贝
    高速排序C++实现
    error: internal error: unable to execute QEMU command &#39;migrate&#39;: this feature or command is not cur
    MySQL查询报错 ERROR: No query specified
    广告倒计时欢迎界面的实现
  • 原文地址:https://www.cnblogs.com/softwyy/p/8969184.html
Copyright © 2011-2022 走看看