C# 動態“地震“圓形電波(WinForm)動圖

2024年2月6日 18点热度 0人点赞

聲明變量:

 private Timer waveTimer;
 private int numWaves = 5;
 private int[] waveRadius;
 private int[] waveOpacity;
 public Form1()
 {
     InitializeComponent();
     this.DoubleBuffered = true;
     this.BackColor = Color.Pink;
     waveTimer = new Timer();
     waveTimer.Interval = 50;
     waveTimer.Tick  = WaveTimer_Tick;
     waveTimer.Start();
     waveRadius = new int[numWaves];
     waveOpacity = new int[numWaves];
     for (int i = 0; i < numWaves; i  )
     {
         waveRadius[i] = 10   i * 20;
         waveOpacity[i] = 255 - i * 40;
     }
 }

時間控件:

 private void WaveTimer_Tick(object sender, EventArgs e)
 {
     for (int i = 0; i < numWaves; i  )
     {
         waveRadius[i]  = 10;
         waveOpacity[i] -= 5;
         if (waveOpacity[i] <= 0)
         {
             waveRadius[i] = 10   i * 20;
             waveOpacity[i] = 255 - i * 40;
         }
     }
     this.Invalidate();
 }

繪制動態電波:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    int centerX = this.ClientSize.Width / 2;
    int centerY = this.ClientSize.Height / 2;
    for (int i = 0; i < numWaves; i  )
    {
        using (Brush waveBrush = new SolidBrush(Color.FromArgb(waveOpacity[i], Color.Red)))
        {
            e.Graphics.FillEllipse(waveBrush, centerX - waveRadius[i], centerY - waveRadius[i], waveRadius[i] * 2, waveRadius[i] * 2);
        }
    }
}

#冬日生活打卡季##文章首發挑戰賽##頭條創作挑戰賽#