类似 Google 的进度指示器






4.66/5 (19投票s)
本文介绍了一个用于 Windows Forms 实现的类似 Google 的紧凑型进度指示器的代码。
引言
如果您一直在为 Windows Forms 应用程序寻找一个不确定进度指示器控件,这可能会有所帮助。它借鉴了相对较新的 GoogleTM 进度指示器(一个带有旋转指示器的圆环)。该控件具有改变其颜色、大小、旋转速度和类型的属性(外部脉冲或动画)。
背景
尽管 DirectX、XNA 和 WPF 已经得到了广泛应用,但此控件的开发仅限于 Drawing2D。许多 Windows Forms 用户可能没有更高级方法的先决条件。
Using the Code
此控件的运行时视图由以下属性和方法控制。
属性
方法
名称 | 结果 |
Pulse | 使指示器前进 |
尺寸和颜色效果
控件的尺寸由 OuterRadius(或)值决定。在上图所示中,外矩形(红色)是控件的客户区矩形。
逐渐变化的颜色效果称为“混合”。在这种情况下,效果是通过使用沿垂直方向的二维 线性渐变画笔 来实现的,并带有从起始颜色(AnnulusColor)到结束颜色(TransitionColor)的线性 混合。混合模式由两个大小相等的数组指定,分别命名为“positions”和“factors”。这两个数组都包含比例值。positions 数组包含从 0.0F 到 1.0F 的值,用于定义垂直方向上的比例距离。factors 数组包含从 0.0F 到 1.0F 的值,用于定义垂直方向上从起始颜色到结束颜色的比例颜色。在上图所示中,括号中的值分别是用于混合线性渐变画笔的位置和因子。
InnerRadius (ir) 值确定将从控件中心排除的圆(实际上是椭圆)。外半径和内半径值之间的差值就是圆环的厚度。圆环的厚度也是旋转指示器的直径。
构建控件
该控件分为十六个步骤构建。
控件的 客户区矩形 和外边界矩形均由 OuterRadius 的值指定。在第二步中,背景颜色设置为 BackgroundColor。然后使用外边界矩形来构建外 区域,首先通过创建 路径 来实现一个椭圆,然后通过该路径创建一个区域。内边界矩形由 InnerRadius 的值指定,并用于构建内区域。区域用于通过从外区域中 排除 内区域来定义圆环(第 8 步)。颜色使用线性渐变画笔应用,起始颜色为 AnnulusColor,结束颜色为 TransitionColor。混合过程如前所述。圆环在其自己的 图形缓冲区 中构建,并且仅在发生颜色或大小更改事件时才进行修订。
指示器在每次定时器滴答时或在控件 脉冲 时在其自己的图形缓冲区中构建。指示器最初绘制在圆环的右侧中心位置。然后发生 平移 和 旋转 变换。之后,两个图形(圆环和指示器)都会渲染到屏幕上。
控件源代码
源代码是使用 Microsoft Visual C# 2008 Express Edition 开发的。如果读者下载了此开发环境,还应下载 Visual C# 2008 Express Edition 的 MSDN 帮助库。GoogleProgressIndicator.cs 中的源代码包含 GraphicsBuffer
类的源代码。这两个类出现在同一个编译单元中,因此不需要对外部类(即 GraphicsBuffer
)的引用。