我正在开发一个动画重的winforms应用程序,我自己制作了所有动画。我使用一个枚举,它包含所有动画,用于调用一个新线程,该线程为相应的控件运行相应的动画。这是一个例子:
private void animateBackColor(Control control)
{
int i = 0;
while (i <= 255)
{
control.BackColor = Color.FromArgb(i, control.BackColor);
i += 15;
Thread.Sleep(15);
}
}
问题如下:
+有时,动画变得过于卡顿和滞后,它们变得可怕。
+被移动的控件重叠的控件需要很长时间才能重新绘制,这看起来很难看。
+我在更改控件属性的部分中很少遇到此错误“在枚举数被实例化后修改了集合”。
这个动画在图像中淡入淡出还有一个问题:
private void animateFadeOut(Control control)
{
int i = 255;
while (i > 15)
{
control.BackColor = Color.FromArgb(i, control.BackColor);
i -= 30;
Thread.Sleep(5);
}
PNL_runningDownloads.Controls.Remove(control);
}
public static Bitmap ChangeOpacity(Image img, float opacityvalue)
{
Bitmap bmp = new Bitmap(img.Width, img.Height); // Determining Width and Height of Source Image
Graphics graphics = Graphics.FromImage(bmp);
ColorMatrix colormatrix = new ColorMatrix {Matrix33 = opacityvalue};
ImageAttributes imgAttribute = new ImageAttributes();
imgAttribute.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
graphics.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, img.Width, img.Height,
GraphicsUnit.Pixel, imgAttribute);
graphics.Dispose(); // Releasing all resource used by graphics
return bmp;
}
+它说该控件目前正在其他地方使用 非常感谢:)