我正在製作一個動畫效果很好的Winforms應用程序,我製作了所有的動畫。 我使用一個枚舉,它包含所有動畫,這些動畫用於調用爲相應控件運行相應動畫的新線程。這裏有一個例子:我的動畫幾個問題c#
private void animateBackColor(Control control)
{
int i = 0;
while (i <= 255)
{
control.BackColor = Color.FromArgb(i, control.BackColor);
i += 15;
Thread.Sleep(15);
}
}
的問題如下:
+有時,動畫太stuttery和laggy,他們就成爲可怕的。
+移動部分重疊的控件花費很長時間重新繪製,看起來很醜。
+我很少得到這個bug,「在枚舉器被實例化後修改了集合」,改變了關於控件的屬性。
還有一個關於這個動畫圖像中消失的問題:
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;
}
+上面說的是控制目前在其他地方使用 非常感謝你:)
這種動畫應該要求'Control'是'DoubleBuffered',你有沒有嘗試過呢?關於'控件當前正在其他地方使用',你有沒有其他線程在運行並使用控件?嘗試在Controls.Remove()之前放置一個'Thread.Sleep()',看看它是否解決了這個問題? –
您的動畫長時間運行還是很簡單,1-2秒過渡? – SOReader
@SOReader他們大多數持續少於2秒 – vbtheory