zoukankan      html  css  js  c++  java
  • c#控件的动画显示效果

    1.  缘由:

    项目中任务完成有个提示,需要以动画效果展示,其效果当如下图:

    此为老项目为Delphi所写,改用c#实现,此效果做些设计。本也不难,小技而已,但为易于扩展,写了个静态类实现。

    2. Animation动画类

    直上代码如下:

        public static class Animation
        {
            private static readonly int MoveStep = 25;
            private static Timer tmrAnim = null;
            private static Control control = null;
            private static AnchorStyles direction = AnchorStyles.None;
            private static Size destSize;
    
            private static void InitTimer()
            {
                if (tmrAnim == null)
                {
                    tmrAnim = new Timer();
                    tmrAnim.Interval = 25;
                    tmrAnim.Tick += new System.EventHandler(tmrAnim_Tick);
                }
            }
    
            private static void tmrAnim_Tick(object sender, System.EventArgs e)
            {
                int newValue = 0;
                int offSet = 0;
                switch (direction)
                {
                    case AnchorStyles.Left:
                    case AnchorStyles.Right:
                        newValue = control.Width + MoveStep;
                        if (newValue > destSize.Width)
                        {
                            tmrAnim.Stop();
                            newValue = destSize.Width;
                        }
    
                        offSet = newValue - control.Width;
                        control.Width += offSet;
                        if (direction == AnchorStyles.Left)
                            control.Left -= offSet;
                        break;
                    case AnchorStyles.Top:
                    case AnchorStyles.Bottom:
                        newValue = control.Height + MoveStep;
                        if (newValue > destSize.Height)
                        {
                            tmrAnim.Stop();
                            newValue = destSize.Height;
                        }
    
                        offSet = newValue - control.Height;
                        control.Height += offSet;
                        if (direction == AnchorStyles.Top)
                            control.Top -= offSet;
                        break;
                }
            }
    
            public static void ShowControl(Control control, bool visible, AnchorStyles direction = AnchorStyles.None)
            {
                if (direction == AnchorStyles.None)
                {
                    control.Visible = visible;
                    return;
                }
    
                if (!visible)
                {
                    if (tmrAnim != null)
                        tmrAnim.Stop();
                    control.Hide();
                }
                else
                {
                    InitTimer();
    
                    if (Animation.control != control && destSize.IsEmpty)
                    {
                        destSize = new Size(control.Width, control.Height);
                    }
                    Animation.control = control;
                    Animation.direction = direction;
                    switch (direction)
                    {
                        case AnchorStyles.Left:
                        case AnchorStyles.Right:
                            if (direction == AnchorStyles.Left)
                                control.Left += control.Width;
                            control.Width = 0;
                            break;
                        case AnchorStyles.Top:
                        case AnchorStyles.Bottom:
                            if (direction == AnchorStyles.Top)
                                control.Top += control.Height;
                            control.Height = 0;
                            break;
                    }
                    control.Show();
                    tmrAnim.Start();
                }
            }
        }

    非常短小,其实现控件由四面出现效果,如下图:

    3. 最终实现效果图:

  • 相关阅读:
    eletron打包
    助力ASP.NET Core 2.1开发!Layx 企业级弹窗插件发布!
    springcloud 入门 3 (服务之间的调用)
    springcloud 入门 2 (Enreka的服务和注册)
    springcloud 入门 1 (浅谈版本关系)
    springboot 学习之路 18(webflux详细介绍(2))
    springboot 学习之路 17(webflux 入门 (1))
    springboot 学习之路 15(集成shiro)
    Mongodb的入门(6)副本集
    Mongodb的入门(4)mongodb3.6的索引
  • 原文地址:https://www.cnblogs.com/crwy/p/6681228.html
Copyright © 2011-2022 走看看