- A+
所属分类:.NET技术
ApeForms系列③ 扩展功能使用技巧——平滑运动实现仿Android桌面翻页
@
前言
本文将讲解如何利用ApeForms扩展方法使控件平滑运动,并以此实现一个仿Android桌面翻页的效果。
实现方法
引用扩展库
在项目中通过NuGet引用ApeForms库,具体步骤请见文章——《WinForm窗体UI美化库(Metro扁平风格)演示与安装》
平滑运动
使用ApeForms扩展库可以实现一行代码使控件平滑运动,调用方法如下:
控件对象.LocationGradualChange(目标位置, 移动速率);
移动速率取值为1~255之间,值越小运动越快,相反值越大越平滑缓慢。
源代码
using System; using System.Drawing; using System.Windows.Forms; namespace Demo.ApeForms.Lesson2 { public partial class AndroidForm : Form { private Control[] pages; private int pageIndex; private byte rate = 5; // 翻页速率 1~20 public AndroidForm() { InitializeComponent(); datePicker1.Year = 2022; pages = new Control[] { tlpPage1, tlpPage2, tlpPage3 }; PageTurning(0); } /// <summary> /// 翻页 /// </summary> /// <param name="pageIndex">页码</param> public void PageTurning(int pageIndex) { this.pageIndex = pageIndex; for (int i = 0; i < pages.Length; i++) { var ctrl = pages[i]; Point point; if (i == pageIndex) { var size = Size - ctrl.Size; point = new Point(size.Width/2,(size.Height - alignCenterBox1.Height) / 2); ctrl.LocationGradualChange(point); } else if(i < pageIndex) { var size = Size - ctrl.Size - alignCenterBox1.Size; point = new Point(-ctrl.Width, size.Height/2); } else { var size = Size - ctrl.Size - alignCenterBox1.Size; point = new Point(Width, size.Height / 2); } ctrl.LocationGradualChange(point, rate); } } private void btnFunc_Click(object sender, EventArgs e) { if(sender == btnLeft) { pageIndex = pageIndex > 0 ? pageIndex - 1 : pages.Length - 1; } else if (sender == btnRight) { pageIndex++; } else { pageIndex = 0; } PageTurning(pageIndex % pages.Length); } } }
源码下载
项目源码已上传到CSDN下载