65.9K
CodeProject 正在变化。 阅读更多。
Home

类似 Google 的进度指示器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.66/5 (19投票s)

2009年9月14日

CPOL

4分钟阅读

viewsIcon

68300

downloadIcon

2927

本文介绍了一个用于 Windows Forms 实现的类似 Google 的紧凑型进度指示器的代码。

GoogleProgressIndicator/googleprogressindicator.png

引言

如果您一直在为 Windows Forms 应用程序寻找一个不确定进度指示器控件,这可能会有所帮助。它借鉴了相对较新的 GoogleTM 进度指示器(一个带有旋转指示器的圆环)。该控件具有改变其颜色、大小、旋转速度和类型的属性(外部脉冲或动画)。

背景

尽管 DirectX、XNA 和 WPF 已经得到了广泛应用,但此控件的开发仅限于 Drawing2D。许多 Windows Forms 用户可能没有更高级方法的先决条件。

Using the Code

此控件的运行时视图由以下属性和方法控制。

属性

名称 类型 单位 默认值 目的
Animate bool 布尔值 true 启动(true)和停止(false)指示器动画
AnnulusColor Color Color 淡青色 设置或获取圆环的基础颜色
BackgroundColor Color Color 系统颜色。
Control
设置或获取控件的背景颜色
IndicatorAngularAdvance int 10 设置或获取指示器在每次滴答或脉冲时移动的度数
IndicatorColor Color Color 白色 设置或获取旋转指示器的颜色
IndicatorType enum 指示器类型 动画 设置或获取控件是动画还是脉冲
InnerRadius int 像素 8 设置或获取圆环内圆的半径
OuterRadius int 像素 12 设置或获取圆环外圆的半径
RefreshRate int 毫秒 150 设置或获取定时器滴答间隔(即控件刷新之间的时间)
TransitionColor Color Color Gray 设置或获取圆环中间位置的过渡颜色

方法

名称 结果
Pulse 使指示器前进

尺寸和颜色效果

GoogleProgressIndicator/googleprogressindicatordimensions.jpg

控件的尺寸由 OuterRadius(或)值决定。在上图所示中,外矩形(红色)是控件的客户区矩形。

逐渐变化的颜色效果称为“混合”。在这种情况下,效果是通过使用沿垂直方向的二维 线性渐变画笔 来实现的,并带有从起始颜色(AnnulusColor)到结束颜色(TransitionColor)的线性 混合。混合模式由两个大小相等的数组指定,分别命名为“positions”和“factors”。这两个数组都包含比例值。positions 数组包含从 0.0F 到 1.0F 的值,用于定义垂直方向上的比例距离。factors 数组包含从 0.0F 到 1.0F 的值,用于定义垂直方向上从起始颜色到结束颜色的比例颜色。在上图所示中,括号中的值分别是用于混合线性渐变画笔的位置和因子。

InnerRadius (ir) 值确定将从控件中心排除的圆(实际上是椭圆)。外半径和内半径值之间的差值就是圆环的厚度。圆环的厚度也是旋转指示器的直径。

构建控件

该控件分为十六个步骤构建。

Google Progress Indicator Construction Steps

控件的 客户区矩形 和外边界矩形均由 OuterRadius 的值指定。在第二步中,背景颜色设置为 BackgroundColor。然后使用外边界矩形来构建外 区域,首先通过创建 路径 来实现一个椭圆,然后通过该路径创建一个区域。内边界矩形由 InnerRadius 的值指定,并用于构建内区域。区域用于通过从外区域中 排除 内区域来定义圆环(第 8 步)。颜色使用线性渐变画笔应用,起始颜色为 AnnulusColor,结束颜色为 TransitionColor。混合过程如前所述。圆环在其自己的 图形缓冲区 中构建,并且仅在发生颜色或大小更改事件时才进行修订。

指示器在每次定时器滴答时或在控件 脉冲 时在其自己的图形缓冲区中构建。指示器最初绘制在圆环的右侧中心位置。然后发生 平移旋转 变换。之后,两个图形(圆环和指示器)都会渲染到屏幕上。

控件源代码

源代码是使用 Microsoft Visual C# 2008 Express Edition 开发的。如果读者下载了此开发环境,还应下载 Visual C# 2008 Express Edition 的 MSDN 帮助库。GoogleProgressIndicator.cs 中的源代码包含 GraphicsBuffer 类的源代码。这两个类出现在同一个编译单元中,因此不需要对外部类(即 GraphicsBuffer)的引用。

© . All rights reserved.