1. 程式人生 > 其它 >ApeForms | C#-WinForm窗體仿Android桌面(左右翻頁)

ApeForms | C#-WinForm窗體仿Android桌面(左右翻頁)

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下載

前往下載 https://download.csdn.net/download/lgj123xj/85463277