Winform圆形环绕的Loading动画实现代码_C#教程-查字典教程网
Winform圆形环绕的Loading动画实现代码
Winform圆形环绕的Loading动画实现代码
发布时间:2016-12-28 来源:查字典编辑
摘要:之前写了一个WPF的圆形环绕的Loading动画,现在写一个Winform的圆形环绕的Loading动画。1.新建Winform项目,添加一...

之前写了一个WPF的圆形环绕的Loading动画,现在写一个Winform的圆形环绕的Loading动画。

1.新建Winform项目,添加一个pictureBox控件,命名为:pictureBox;

2.引用中添加using System.Drawing.Drawing2D;

3.Form窗体命名为:Loading,cs全部代码如下:

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Collections;

using System.Drawing.Drawing2D;

namespace Circle_ProcessBar

{

public partial class Loading : Form

{

private int count = -1;

private ArrayList images = new ArrayList();

public Bitmap[] bitmap = new Bitmap[8];

private int _value = 1;

private Color _circleColor = Color.Red;

private float _circleSize = 0.8f;

public Loading()

{

InitializeComponent();

}

public Color CircleColor

{

get { return _circleColor; }

set

{

_circleColor = value;

Invalidate();

}

}

public float CircleSize

{

get { return _circleSize; }

set

{

if (value <= 0.0F)

_circleSize = 0.05F;

else

_circleSize = value > 4.0F ? 4.0F : value;

Invalidate();

}

}

public Bitmap DrawCircle(int j)

{

const float angle = 360.0F / 8; Bitmap map = new Bitmap(150, 150);

Graphics g = Graphics.FromImage(map);

g.TranslateTransform(Width / 2.0F, Height / 2.0F);

g.RotateTransform(angle * _value);

g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.SmoothingMode = SmoothingMode.AntiAlias;

int[] a = new int[8] { 25, 50, 75, 100, 125, 150, 175, 200 };

for (int i = 1; i <= 8; i++)

{

int alpha = a[(i + j - 1) % 8];

Color drawColor = Color.FromArgb(alpha, _circleColor);

using (SolidBrush brush = new SolidBrush(drawColor))

{

float sizeRate = 3.5F / _circleSize;

float size = Width / (6 * sizeRate);

float diff = (Width / 10.0F) - size;

float x = (Width / 80.0F) + diff;

float y = (Height / 80.0F) + diff;

g.FillEllipse(brush, x, y, size, size);

g.RotateTransform(angle);

}

}

return map;

}

public void Draw()

{

for (int j = 0; j < 8; j++)

{

bitmap[7-j] = DrawCircle(j);

}

}

protected override void OnResize(EventArgs e)

{

SetNewSize();

base.OnResize(e);

}

protected override void OnSizeChanged(EventArgs e)

{

SetNewSize();

base.OnSizeChanged(e);

}

private void SetNewSize()

{

int size = Math.Max(Width, Height);

Size = new Size(size, size);

}

public void set()

{

for (int i = 0; i < 8; i++)

{

Draw();

Bitmap map = new Bitmap((bitmap[i]), new Size(120, 110));

images.Add(map);

}

pictureBox.Image = (Image)images[0];

pictureBox.Size = pictureBox.Image.Size;

}

private void pictureBox_Click(object sender, EventArgs e)

{

this.Visible = false;

base.Dispose();

}

private void Timer_Tick(object sender, EventArgs e)

{

set();

count = (count + 1) % 8;

pictureBox.Image = (Image)images[count];

}

private void button1_Click(object sender, EventArgs e)

{

this.Visible = false;

base.Dispose();

}

}

}

4.效果如图:

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类