CSkin博客

标题: 【360动画效果】仿360杀毒-页面切换动画效果(C#源码) [打印本页]

作者: 乔克斯    时间: 2017-1-24 11:53
标题: 【360动画效果】仿360杀毒-页面切换动画效果(C#源码)
说明:
C#winform版 《仿360杀毒》页面切换动画效果昨天跟一个同事聊天,谈到了360杀毒的页面效果不错,我们所做的winform页面都是拖控件还是拖控件,不能吸引客户的注意力,想改成360的样式。
今天活不多,抽空仿做了两个360杀毒的页面切换效果,其实原理很简单,这里分享出来,希望能给大家带来帮助。期间滑动的时候,窗体是不能拖动或者点击其他的功能,这里可能是用了单线程进行了页面切换。

功能详解:
滑动效果
“功能大全功能”的切换效果是右到左滑入,从最右侧,迅速往左侧滑入,当快要完成切换时,有个稍微停顿的效果,接着缓冲效果到页面完全显示。
页面进入部分

页面退出时,也是右侧到左侧滑出,和滑入一样,前期是迅速往左侧滑出,当快要完成切出时,也是有个稍微的停顿效果,接着缓冲效果到页面完全消失。
页面移出部分

这个动画效果,用单线程实现就好了,实例化滑动的窗体,初始化窗体原坐标为窗口最右侧(form.Width,0),之后使用for,while,Timer,BackgroundWork等等都可以。
我这里用了While进行单线程切换:
[C#] 纯文本查看 复制代码
        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:
动画方法:
[C#] 纯文本查看 复制代码
        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:
[C#] 纯文本查看 复制代码
        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:
[C#] 纯文本查看 复制代码
        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);
        }


作品效果图:


案例源码下载:
仿360杀毒页面切换动画效果.rar (1.13 MB, 下载次数: 3135, 售价: 1 金钱)


作者: mqzzzz    时间: 2017-1-24 13:46
6666666666666666666666666666
作者: zimistan    时间: 2017-1-25 16:52
谢谢了 楼主
作者: 贰佰伍    时间: 2017-1-26 21:59
这个就很厉害了
作者: eddieiat    时间: 2017-2-2 17:05
乔克斯根本是大神啊
作者: 罗布斯    时间: 2017-2-8 14:57
厉害了,好东西
作者: sas    时间: 2017-2-9 14:58
厉害了,好东西
作者: qq541717868    时间: 2017-2-10 09:31
好厉害啊
作者: 123456mnk    时间: 2017-2-10 11:07
厉害,界面能做的再精致点就更完美了。
作者: 无醉    时间: 2017-2-14 09:41
谢谢了 楼主
作者: tolwm    时间: 2017-2-16 10:38
感谢楼主对论坛作出的贡献
作者: longlv    时间: 2017-2-17 10:32
学习学习学习学习学习学习学习学习
作者: 杨员外    时间: 2017-2-17 15:21
这个效果很好
作者: wesson2016    时间: 2017-2-19 18:25
楼主辛苦
作者: wanghun315    时间: 2017-2-23 08:31
感谢楼主分享
作者: 炎山fire    时间: 2017-3-2 16:48
好厉害~
作者: 打不过超精兵    时间: 2017-3-3 10:30
楼主好人,666
作者: 小哲    时间: 2017-3-9 01:50
66666厉害!!!!!!!!!!!!!!
作者: g1187131137    时间: 2017-3-17 17:38
6666666666
作者: Mlegbder    时间: 2017-3-21 09:17
谢谢了 楼主
作者: 1078933133aa    时间: 2017-3-28 19:16
谢谢楼主了,辛苦了
作者: liquidl    时间: 2017-4-2 00:55
学习一下,谢谢楼主分享
作者: 1256415777    时间: 2017-4-11 14:16
阿斯达所sad
作者: Champagne    时间: 2017-4-17 13:03
哇··谢谢大神
作者: root    时间: 2017-4-21 03:27
好久不见
作者: stcn52    时间: 2017-4-22 12:20
乔克斯根本是大神啊
作者: vinsent    时间: 2017-4-24 09:45
真的很不错谢谢楼主。
作者: 我要学c#    时间: 2017-4-28 10:49
你们都怎么学的阿。。。好厉害。。。啥时候才能跟你们一样厉害。。。。
作者: alimjanbay    时间: 2017-4-28 16:33
kanyikan,,,,,,,,,,,,,,,,,,,,,,,,,
作者: wintrue    时间: 2017-4-28 18:18
我今天最想说
作者: wintrue    时间: 2017-4-28 18:19
我今天最想说
作者: xingtian    时间: 2017-5-5 10:38
厉害了,好东西
作者: qdboris    时间: 2017-5-6 09:35
说实话,效果挺好

作者: biubiu2017    时间: 2017-5-20 21:05
厉害了厉害了厉害了
作者: heyulunzzz    时间: 2017-5-29 16:01
很炫!下载要金钱啊
作者: cc448    时间: 2017-6-2 21:02
66666666666
作者: kevinsteve    时间: 2017-7-29 22:20
谢谢分享,LZ辛苦了。
作者: useronce    时间: 2017-8-1 10:55
效果很炫,厉害!
作者: cannycsy    时间: 2017-8-1 14:27
如何有金币的?发信息吗?

作者: geyaodemo    时间: 2017-8-1 16:26
78888888888888888888888888888888888888888888888888888888888888888888888
作者: geyaodemo    时间: 2017-8-1 16:26
8900000000000000000000000000000000000000000000
作者: geyaodemo    时间: 2017-8-1 16:27
999999999999999999999999999999999999999999999999
作者: sky656    时间: 2017-8-9 20:37
666666666666666666
作者: 看雪飘过    时间: 2017-9-14 10:08
下载学习一下!感谢!
作者: 尕尕小孩    时间: 2017-9-26 15:04
厉害了,我的乔克斯
作者: dayer    时间: 2017-9-30 16:02
挺漂亮
作者: very2018    时间: 2017-10-10 14:50
学习一下
作者: very2018    时间: 2017-10-10 14:50
参考学习一下
作者: mgod2008    时间: 2017-11-7 22:58
这个漂亮!!
作者: zhangzhg0508    时间: 2017-11-28 10:38
一直喜欢这个控件集合
作者: QW去    时间: 2018-1-9 13:02
楼主辛苦了
作者: 15305415328    时间: 2018-1-19 18:48
功能不错,厉害
作者: soursalon    时间: 2018-1-21 19:49
好东西。。谢分享
作者: nealxu    时间: 2018-2-4 00:05
谢谢了 楼主谢谢了 楼主
作者: szsl666    时间: 2018-2-12 18:08
十分感谢楼主,长知识了~~展开闭合的效果很好~就是点了几次展开式以后,程序挂了,噗
作者: boxxie    时间: 2018-2-14 09:44
来还习一下C#
作者: stars    时间: 2018-3-8 20:18
多谢楼主,拿走了
作者: 君子小白    时间: 2018-3-13 15:59
好东西 学习了
作者: freeloop88    时间: 2018-3-15 15:38
真的很不错,非常感谢楼主
作者: panda313    时间: 2018-4-18 10:21
非常漂亮的界面,非常感谢!
作者: 742897830    时间: 2018-4-27 22:52
好好哦,学习了.......
作者: 潜水30年    时间: 2018-5-1 09:22
厉害厉害
作者: hexbaby    时间: 2018-5-4 12:25
效果帮帮的
作者: fdsanuif    时间: 2018-5-6 22:47
666666666666
作者: jeffrey    时间: 2018-5-16 19:19
good!!很给力啊。。
作者: Flyingfish1982    时间: 2018-5-22 11:33
效果很炫酷,学习了
作者: LIQC    时间: 2018-6-12 23:20
6666666666666666666666666666
作者: xjc_ahbvc    时间: 2018-6-13 09:21
腻害了,都是技术大牛
作者: xzp132706    时间: 2018-6-22 19:55
谢啦楼主
作者: chennange    时间: 2018-6-25 11:20
看起来相当不错 呵呵
作者: 梦魇霸霸    时间: 2018-7-5 19:55
233333333333333
作者: sleep_thread    时间: 2018-7-11 19:17
楼主厉害了,已下载
作者: ChristianK    时间: 2018-7-13 13:26
嗯?可是源代码在哪里呢?
作者: nexthero    时间: 2018-8-2 16:42
看上去很美,棒棒的
作者: ccwRadar    时间: 2018-8-3 10:45
不错的样子。。。。
作者: adwolf    时间: 2018-8-10 12:12
学习学习学习学习学习学习学习
作者: adwolf    时间: 2018-8-10 12:13
很好学习学习,好好学习。。。。。
作者: zfsy    时间: 2018-10-6 17:49
感谢楼主分享
作者: Topi    时间: 2018-10-18 17:26
        感谢分享,LZ辛苦了~
作者: yangqianyu21    时间: 2018-11-9 20:09
可以设置窗体的背景图片吗?

作者: nthao    时间: 2018-11-19 13:29
谢谢了 楼主
作者: nthao    时间: 2018-11-19 13:29
谢谢了 楼主
作者: 王平平平    时间: 2018-12-28 19:55
看看效果好不好
作者: 童冬冬    时间: 2018-12-29 12:47
请问,下载那个压缩包后,为什么会显示错误,打不开呢
作者: 万代    时间: 2019-1-9 16:13
这效果真的很给力
作者: wcjmecn    时间: 2019-1-16 10:09
666666666666666
作者: heping072054214    时间: 2019-1-16 16:49
感谢楼主分享
作者: jalonfun    时间: 2019-1-16 17:29
非常感谢您的分享
作者: 踏入VS的路上    时间: 2019-1-22 10:04
一点都不萌的新人来报道!!
作者: niil    时间: 2019-2-12 16:58
这个很厉害
作者: chuxuming    时间: 2019-2-21 15:46
dddddddddddddddd
作者: lee2k    时间: 2019-3-1 14:03
这个效果非常好!很喜欢,谢谢分享了!
作者: 山水美    时间: 2019-3-9 10:10
展示效果很吸引人,忍不住下载了,支持楼主!
作者: Madhn.zhan    时间: 2019-3-12 10:10
下载看看
作者: n091912    时间: 2019-4-3 19:31
謝謝樓主分享
作者: hzggggggg    时间: 2019-4-23 14:04
66666666666666666666666666666666666
作者: qq762965287    时间: 2019-5-20 14:09
下载试试效果,谢谢分享
作者: 执剑走天下    时间: 2019-5-26 13:18
学学习.xiexie  
作者: songrsp    时间: 2019-5-29 14:52
感谢分享,LZ辛苦了~
作者: iwanke    时间: 2019-6-5 06:38
厉害厉害,向大佬学习




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2