wpf 前端特效(1),地震波环形

文章引用来自博客园,仅供个人学习不对外开放

1. 动态环形效果RingControl封装代码

    public partial class RingControl : UserControl
    {
        /// <summary>
        /// 圆的颜色
        /// </summary>
        public Brush EllipseStroke { get; set; }
        /// <summary>
        /// 圆环的宽度
        /// </summary>
        public double EllipseStrokeThickness { get; set; }
        /// <summary>
        /// 圆的最小尺寸
        /// </summary>
        public double MinSize { get; set; }
        /// <summary>
        /// 圆的最大尺寸
        /// </summary>
        public double MaxSize { get; set; }
        /// <summary>
        /// 总圆环数量
        /// </summary>
        public int EllipseNum { get; set; }
        /// <summary>
        /// 不同圆之间的时间间隔
        /// </summary>
        public double EllipseInterval { get; set; }
        /// <summary>
        /// 动画启动等待时间
        /// </summary>
        private double StoryBeginTime { get; set; }
        /// <summary>
        /// 动画持续时间
        /// </summary>
        public double AnimationDuration { get; set; }
 
        public RingControl()
        {
            InitializeComponent();
        }
 
        private void MyUserControl_Loaded(object sender, RoutedEventArgs e)
        {
            Ellipse centerE = new Ellipse()
            {
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
                Width = MinSize,
                Height = MinSize,
                Stroke = EllipseStroke,
                StrokeThickness = EllipseStrokeThickness,
            };
            this.mainGrid.Children.Add(centerE);
            InitAnimation();
        }
 
        private void InitAnimation()
        {
            for (int i = 1; i <= EllipseNum; i++)
            {
                Storyboard story = new Storyboard()
                {
                    //是否循环
                    RepeatBehavior = RepeatBehavior.Forever,
                    //动画刷新速度
                    SpeedRatio = 2
                };
                //透明度调整动作
                DoubleAnimation myOpacityAnimation = new DoubleAnimation
                {
                    From = 1,
                    To = 0,
                    Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
                };
                story.Children.Add(myOpacityAnimation);
                //宽度调整动作
                DoubleAnimation myWidthSizeChangeAnimation = new DoubleAnimation
                {
                    From = MinSize,
                    To = MaxSize,
                    Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
                };
                story.Children.Add(myWidthSizeChangeAnimation);
                //高度调整动作
                DoubleAnimation myHeightSizeChangeAnimation = new DoubleAnimation
                {
                    From = MinSize,
                    To = MaxSize,
                    Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
                };
                story.Children.Add(myHeightSizeChangeAnimation);
                //生成形状
                Ellipse tempE = new Ellipse()
                {
                    HorizontalAlignment = HorizontalAlignment.Center,
                    VerticalAlignment = VerticalAlignment.Center,
                    Width = MinSize,
                    Height = MinSize,
                    Stroke = EllipseStroke,
                    StrokeThickness = EllipseStrokeThickness,
                };
                //动画赋值
                Storyboard.SetTarget(myOpacityAnimation, tempE);
                Storyboard.SetTargetProperty(myOpacityAnimation, new PropertyPath(Ellipse.OpacityProperty));
                Storyboard.SetTarget(myWidthSizeChangeAnimation, tempE);
                Storyboard.SetTarget(myHeightSizeChangeAnimation, tempE);
                Storyboard.SetTargetProperty(myWidthSizeChangeAnimation, new PropertyPath(Ellipse.WidthProperty));
                Storyboard.SetTargetProperty(myHeightSizeChangeAnimation, new PropertyPath(Ellipse.HeightProperty));
 
                mainGrid.Children.Add(tempE);
                //时间间隔
                StoryBeginTime += EllipseInterval;
                story.BeginTime = TimeSpan.FromMilliseconds(StoryBeginTime);
                story.Begin();
            }
        }
    }

2. 主界面调用

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            RingControl redRing = new RingControl
            {
                MinSize = 25,
                MaxSize = 100,
                EllipseNum = 4,
                EllipseInterval = 800,
                AnimationDuration = 5,
                EllipseStroke = new SolidColorBrush(Colors.Red),
                EllipseStrokeThickness = 25,
                Margin = new Thickness(-150,-300,0,0),
            };
            this.mainGrid.Children.Add(redRing);
 
            RingControl blueRing = new RingControl
            {
                MinSize = 25,
                MaxSize = 100,
                EllipseNum = 4,
                EllipseInterval = 800,
                AnimationDuration = 5,
                EllipseStroke = new SolidColorBrush(Colors.Blue),
                EllipseStrokeThickness = 25,
                Margin = new Thickness(-200, 300, 0, 0),
            };
            this.mainGrid.Children.Add(blueRing);
 
            RingControl greenRing = new RingControl
            {
                MinSize = 25,
                MaxSize = 100,
                EllipseNum = 4,
                EllipseInterval = 800,
                AnimationDuration = 5,
                EllipseStroke = new SolidColorBrush(Colors.Green),
                EllipseStrokeThickness = 25,
                Margin = new Thickness(200, 20, 0, 0),
            };
            this.mainGrid.Children.Add(greenRing);
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一个用于创建可视化用户界面的框架,它具有丰富的特效功能。火焰特效是其中一个非常实用的特效,可以为应用程序增添动态和生动的视觉效果。 要实现一个实用的WPF火焰特效,可以使用一些基本的图形元素和动画技巧。以下是一个简单的实例: 首先,创建一个Canvas作为容器,用于承载火焰特效的元素。在Canvas中,添加一个Ellipse作为火焰的底部,设置其填充颜色为橙色。 然后,使用多个Path元素来定义火焰的形状。路径的绘制可以参考火焰的形状和效果,可以使用曲线和直线的组合来绘制出火焰的轮廓,并填充红色或橙色。 接下来,使用TransformGroup和ScaleTransform来实现火焰动画效果。通过改变ScaleTransform的ScaleY属性值,可以实现火焰的垂直扩展和收缩效果。 最后,使用Storyboard和DoubleAnimation来创建动画。在Storyboard中,使用DoubleAnimation实现ScaleTransform的ScaleY属性值从1到一个较小的值,然后再从这个值回到1的过程。通过设置动画的持续时间和重复次数,可以控制火焰的动画效果。 这样,一个实用的WPF火焰特效就创建好了。在应用程序中使用这个特效,可以为界面增加一些动态和生动的效果,吸引用户的注意力。 总的来说,WPF火焰特效是一个非常实用的特效,通过使用基本的图形元素、动画技巧和特效绘制,可以为应用程序增添动态和生动的视觉效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值