1.移动动画
需要参数(目标点离最上边的位置,目标点离最左边的位置,元素名称)
Image mImage = new Image();
FloatInElement(100,100,mImage);
/// <summary>
/// 移动动画
/// </summary>
/// <param name="top">目标点相对于上端的位置</param>
/// <param name="left">目标点相对于左端的位置</param>
/// <param name="elem">移动元素</param>
public static void FloatInElement(double top, double left, UIElement elem)
{
try
{
DoubleAnimation floatY = new DoubleAnimation()
{
To = TransValueFromHeight(top),
Duration = new TimeSpan(0, 0, 0, 1, 0),
};
DoubleAnimation floatX = new DoubleAnimation()
{
To = TransValueFromWidth(left),
Duration = new TimeSpan(0, 0, 0, 1, 0),
};
elem.BeginAnimation(Canvas.TopProperty, floatY);
elem.BeginAnimation(Canvas.LeftProperty, floatX);
}
catch (Exception)
{
throw;
}
}
2.透明度动画
需要参数(元素名称,需要到达的透明度)
Image mImage = new Image();
FloatInElement(mImage,0);
/// <summary>/// 透明度动画
/// </summary>
/// <param name="elem"></param>
/// <param name="to"></param>
public static void FloatElement(UIElement elem, double to)
{
lock (elem)
{
if (to == 1)
{
elem.Visibility = Visibility.Visible;
}
DoubleAnimation opacity = new DoubleAnimation()
{
To = to,
Duration = new TimeSpan(0, 0, 0, 1, 0)
};
EventHandler handler = null;
opacity.Completed += handler = (s, e) =>
{
opacity.Completed -= handler;
if (to == 0)
{
elem.Visibility = Visibility.Collapsed;
}
opacity = null;
};
elem.BeginAnimation(UIElement.OpacityProperty, opacity);
}
}
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
/// <summary>/// 用户控件是的动画
/// </summary>
/// <param name="element">控件名</param>
/// <param name="point">元素开始动画的位置</param>
/// <param name="from">元素开始的大小</param>
/// <param name="from">元素到达的大小</param>
public static void ScaleEasingAnimationShow(FrameworkElement element, Point point, double from, double to)
{
lock (element)
{
ScaleTransform scale = new ScaleTransform();
element.RenderTransform = scale;
element.RenderTransformOrigin = point;//定义圆心位置
EasingFunctionBase easeFunction = new PowerEase()
{
EasingMode = EasingMode.EaseOut,
Power = 5
};
DoubleAnimation scaleAnimation = new DoubleAnimation()
{
From = from, //起始值
To = to, //结束值
EasingFunction = easeFunction, //缓动函数
Duration = new TimeSpan(0, 0, 0, 1, 0) //动画播放时间
};
AnimationClock clock = scaleAnimation.CreateClock();
scale.ApplyAnimationClock(ScaleTransform.ScaleXProperty, clock);
scale.ApplyAnimationClock(ScaleTransform.ScaleYProperty, clock);
}
}
4.缓动动画-缩放和旋转动画
/// <summary>
/// 支撑同时旋转和缩放的动画
/// </summary>
/// <param name="element">控件</param>
/// <param name="from">元素开始的大小</param>
/// <param name="to">元素到达的大小</param>
/// <param name="time">动画世界</param>
/// <param name="completed">结束事件</param>
public static void ScaleRotateEasingAnimationShow(UIElement element, double from, double to, TimeSpan time, EventHandler completed)
{
//旋转
RotateTransform angle = new RotateTransform();
//缩放
ScaleTransform scale = new ScaleTransform();
TransformGroup group = new TransformGroup();
group.Children.Add(scale);
group.Children.Add(angle);
element.RenderTransform = group;
//定义圆心位置
element.RenderTransformOrigin = new Point(0.5, 0.5);
EasingFunctionBase easeFunction = new PowerEase()
{
EasingMode = EasingMode.EaseInOut,
Power = 2
};
// 动画参数
DoubleAnimation scaleAnimation = new DoubleAnimation()
{
From = from,
To = to,
EasingFunction = easeFunction,
Duration = time,
FillBehavior = FillBehavior.Stop
};
// 动画参数
DoubleAnimation angleAnimation = new DoubleAnimation()
{
From = 0,
To = 360,
EasingFunction = easeFunction,
Duration = time,
FillBehavior = FillBehavior.Stop,
};
angleAnimation.Completed += completed;
// 执行动画
scale.BeginAnimation(ScaleTransform.ScaleXProperty, scaleAnimation);
scale.BeginAnimation(ScaleTransform.ScaleYProperty, scaleAnimation);
angle.BeginAnimation(RotateTransform.AngleProperty, angleAnimation);
}