开博第一篇作品-C#winform版《仿360杀毒》页面切换动画效果(内含源码)
C#winform版 《仿360杀毒》页面切换动画效果
昨天跟一个同事聊天,谈到了360杀毒的页面效果不错,我们所做的winform页面都是拖控件还是拖控件,不能吸引客户的注意力,想改成360的样式。
今天活不多,抽空仿做了两个360杀毒的页面切换效果,其实原理很简单,这里分享出来,希望能给大家带来帮助。
期间滑动的时候,窗体是不能拖动或者点击其他的功能,这里可能是用了单线程进行了页面切换。
滑动效果
“功能大全功能”的切换效果是右到左滑入,从最右侧,迅速往左侧滑入,当快要完成切换时,有个稍微停顿的效果,接着缓冲效果到页面完全显示。
页面进入部分
页面退出时,也是右侧到左侧滑出,和滑入一样,前期是迅速往左侧滑出,当快要完成切出时,也是有个稍微的停顿效果,接着缓冲效果到页面完全消失。
页面移出部分
这个动画效果,用单线程实现就好了,实例化滑动的窗体,初始化窗体原坐标为窗口最右侧(form.Width,0),之后使用for,while,Timer,BackgroundWork等等都可以。
我这里用了While进行单线程切换:
private void AnimationX(Control ctrl, int x, int milliseconds){Point startPoint = ctrl.Location;int vector = x >= ctrl.Location.X ? 1 : -1;int length = Math.Abs(startPoint.X - x);if (Math.Abs(vector * length) > milliseconds)vector = vector * length / milliseconds;while ((ctrl.Location.X - x) > 0){ctrl.Location = new Point(ctrl.Location.X + vector, ctrl.Location.Y);Application.DoEvents();if (x < 0)System.Threading.Thread.Sleep(5);}ctrl.Location = new Point(x, ctrl.Location.Y);}
上下分页效果
“查杀功能”的切换效果是上下分离,页面从中间横线出分裂开,上部分向上打开,下半部分向下打开,最后显示第二个页面,这样完成了页面的切换功能。
这里如果在用单线程的话,就会出现,先上半部分向上打开后,在下半部分向下打开,这样不能够实现上下部分同时打开效果,如果在同一个方法内操作两个部分,这样就会是代码出现冗余情况。你不觉得这样写很不好吗,而且维护的话也很难,看起来也有点费劲是吧。呵呵 ^ ^
这里我用了BackgroundWork:
动画方法:
private void AnimationY(Control ctrl, int y, int milliseconds, bool IsUp){Point startPoint = ctrl.Location;int vector = y >= ctrl.Location.Y ? 1 : -1;int length = Math.Abs(startPoint.Y - y);if (Math.Abs(vector * length) > milliseconds)vector = vector * length / milliseconds;while ((IsUp && (ctrl.Location.Y + vector) > y) || (!IsUp && (ctrl.Location.Y + vector) < y)){ctrl.Location = new Point(ctrl.Location.X, ctrl.Location.Y + vector);System.Threading.Thread.Sleep(10);Application.DoEvents();}ctrl.Location = new Point(ctrl.Location.X, y);}
上半部分的BackgroundWork:
private void bgwTop_DoWork(object sender, DoWorkEventArgs e){int[] tem=e.Argument as int[];int Y = tem[0];int y = tem[1];int milliseconds = tem[2];bool IsUp = Convert.ToBoolean(tem[3]);int vector = y >= tem[0] ? 1 : -1;int length = Math.Abs(Y - y);if (Math.Abs(vector * length) > milliseconds)vector = vector * length / milliseconds;while ((IsUp && (Y + vector) > y) || (!IsUp && (Y + vector) < y)){bgwTop.ReportProgress(Y + vector, null);System.Threading.Thread.Sleep(25);//Application.DoEvents();Y=Y + vector;}bgwTop.ReportProgress(y, null);}private void bgwTop_ProgressChanged(object sender, ProgressChangedEventArgs e){this.lblTop.Location = new Point(this.lblTop.Location.X, e.ProgressPercentage);}
下半部分的BackgroundWork:
private void bgwBottom_DoWork(object sender, DoWorkEventArgs e){int[] tem = e.Argument as int[];int Y = tem[0];int y = tem[1];int milliseconds = tem[2];bool IsUp = Convert.ToBoolean(tem[3]);int vector = y >= tem[0] ? 1 : -1;int length = Math.Abs(Y - y);if (Math.Abs(vector * length) > milliseconds)vector = vector * length / milliseconds;while ((IsUp && (Y + vector) > y) || (!IsUp && (Y + vector) < y)){bgwBottom.ReportProgress(Y + vector, null);System.Threading.Thread.Sleep(25);//Application.DoEvents();Y = Y + vector;}bgwBottom.ReportProgress(y, null);}private void bgwBottom_ProgressChanged(object sender, ProgressChangedEventArgs e){this.lblBottom.Location = new Point(this.lblBottom.Location.X, e.ProgressPercentage);}
作品效果图:
消除动画闪现
最后看过效果图后,是不是发现中间闪烁现象是不是很严重,不急这里我们在构造里面加上一句话就OK了。
// 设置控件 双缓冲开启this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
来,在自己的作品里添加上来看看效果吧。
源代码下载
开博第一篇作品-C#winform版《仿360杀毒》页面切换动画效果(内含源码)相关推荐
- 开博第一篇 往后余生,唯愿你幸福
开博第一篇 --------十年相思伊人去,QQ不在微信来 我想轻轻的问候你一声 忙碌中的你过得还好吗 其实我过的不好 但我希望你过得好 没有你的日子 其实我活的很累 但我希望你活得轻松 没有你的日子 ...
- 开博第一篇:写在前面,一名阿里程序员的永恒生命追求之路
想写这个文章很久了,几次起笔,冥想,叹几口气后都是无奈的放下.自己不是一个擅长写文章的人,不知道内心的这些想法和决定的思路该怎么去表达和描述.然而路总是要走的,远方依旧遥远,在三十岁的当下,方向远比速 ...
- 在CSDN开博第一篇,以及之前在百度空间的一些文章
2008年4月研一在读的时候,在百度空间开了一个技术类博客,写了七八十篇文章,主要记录了自己自学以及在企业实习时候的一些经验总结.但从2010年开始,由于各种原因,就很少再写博客了.而且发现百度空间越 ...
- 不试过你怎么知道?开博第一篇(本人菜鸟也,高手可以飘过)
我是菜鸟,一直都是,只不过以前比现在更菜而已. 注册博客园居然有5个月了.昨晚看过一位迷茫中的仁兄30岁了不知道干什么..我跟他差不多. 既然他可以申请开博,为什么我就不试试看呢? 试试看又不会损失什 ...
- 51CTO开博第一篇:信仰和领导力(读书感悟)
平安夜开博是个好日子吧~ 我这么想着,就开始写了. 最近感触最深的是看了两本书,<写给上班族的世界史>上下. 为什么说感触最深,因为这样的事儿之前没听过,现实中没见过. 一是宗教对人的影响 ...
- 开博第一篇 近来心得
一点想法 很早在收集资源的时候,便接触过csdn,一些其他地方不能收集到的软件,在这里都能下载到,开始的时候积分还容易获得一点,再后来只能望尘莫及. 还记得12年时在文库找ppt学c语言数据结构的时日 ...
- VMware Workstation7.1新版特性测试(开博第一篇)
vmwrae官方于25日放出了vmwrae workstation7.1最新版本 本着服务大家,体验最新的理念.抱着不怕死机,不怕蓝屏,不怕重装的态度,开始了测试. 在大家往下看之前,还是要啰嗦下啊, ...
- 开博第一篇,申请博客的理由
随着学习的不断深入,开个博客的想法越来越强烈.一来是想记录成长道路上的一些学习笔记,以便日后整理复习和交流学习:二来是想记录在实践中遇到的种种问题,以及相应的解决方法,以便自己或他人遇到类似的问题能够 ...
- 开博第一篇,附上我开通博客的理由
作为一个计算机专业的学生,虽然本科学的是计算机,但是很多东西还只是停留在书本上对知识的认识,一年的前端工作经验,让我学到了很多,也让我明白了博客的重要性,开通博客只是为了梳理一下自己的知识,完善自己的 ...
最新文章
- 第二届Bio-protocol生物实验短视频大赛作品征集开始 | 奖品丰厚,等你来拿
- UnicodeEncodeError: 'ascii' codec can't encode character '\xe3' in position 0: ordinal not in range
- 再来一次的C语言贪吃蛇小游戏(一)
- Python程序员面试牢记这些,助你闯关成功!
- OpenCV形态转换Morphology Transformations
- 播放生成Android4.0.3中的提示音
- 污染物在线自动监控(监测)系统数据传输标准 (HJ212-2017)-空气质量监测数据包构造...
- JavaScript中对象的比较
- Cocos数据篇[3.4](3) ——XML数据操作
- Autorun.inf病毒和qhbpriAppInit_DLLs专杀
- 考研数学 曲线曲面积分
- 栈区的使用规则、压栈和出栈、栈区先进后出,后进先出
- 掘金 AMA:听蚂蚁金服高级技术专家-- 章耿谈微服务、架构、日志那些事
- WIFI热点软件测试,用手机WiFi热点已OUT 华为随行WiFi Plus评测
- Python3获取拉勾网招聘信息的方法实例
- Linux Kernel Security全景图系列之开篇
- excel怎么固定住一行和一列
- Python中使用BeautifulReport形成测试报告教程
- 关于error C2065 错误
- svn提交代码报错:A conflict in the working copy obstructs the current operation,解决办法
热门文章
- 老生常谈:项目管理之时间管理
- 如何更改计算机里卷标的顺序,怎么修改磁盘的卷标|磁盘的卷标怎么设置
- 让多个div并列显示在一行|并列div
- jlink怎么调试linux程序_使用jlink+gdbserver+insight调试ARM程序--配置insight
- 一文了解27市5G建设最新进展与规划
- 设置VIM以便于编写C语言
- matlab dms2degrees,Convert degrees-minutes to degrees
- 以前的互联网时代,其实就是一个以互联网技术为主导的年代
- leetcode:2085. 统计出现过一次的公共字符串
- train-images-idx3-ubyte.gz train-labels-idx1-ubyte.gz 下载