吐槽:这两天CSDN改版的消息似乎很火。。什么更换技术全部重写,然后N多人下面跟帖「好啊」「振奋啊」「RoR技术如何」「重写的时候某某功能如何如何改」。。。
我很无语。。我只想问CSDN一句话:买个商用 BBS 能要你命啊?反正要换服务器,换个PHP的怎么了?Discuz!、SMF、VBulletin这些经过超长时间、超大流量、超多用户验证过的优秀论坛,性能又好用户体验也好,买一个来用怎么了?非得招一帮人来从头开发。。
我的大脑似乎只支持短时间思考。。稍微长点的东西就没兴趣了。。
最近换成用Google Chrome,觉得它的进度条挺有意思的,就是这个:
于是简单复刻了一个。。
功能
显示给定进度百分比(0-100)。如果进度值达到100%,则将闪烁指定次数。
属性
BlinkCount,结束后闪烁几次。0为不闪烁,默认2
BlinkSpeed,闪烁速度,0-255,默认10
Image,图标,null则不显示
SpokeColor,辐条颜色
SpokeCount,辐条数量(穿过圆心算1根)
Value,进度百分比
事件
没有加入进度变化或完成事件,如果需要请自行添加。
结构
原理比较简单,参照此图:
层次如下:
用Parent.BackColor填充背景
画进度,用DrawPie()做
画辐条,对穿圆心,drawSpokes()
画图标,居中,drawIcon()
动画
利用一个System.Windows.Forms.Timer控件完成,在Timer中只修改淡出进度,之后Refresh(),在Paint事件中改变填充色的Alpha分量,重绘一个圆。
如此反复数次,即呈现出闪烁效果。
if (!timer.Enabled || blink == BlinkCount)
drawProgress(canvasGraphic, value);
else
{
((SolidBrush)pieBrush).Color = Color.FromArgb(count, ForeColor.R, ForeColor.G, ForeColor.B);
canvasGraphic.FillEllipse(pieBrush, rect);
((SolidBrush)pieBrush).Color = ForeColor;
}
其余部分请参阅代码:
点击下载
欢迎改进补充。。总之。。我是懒了。。