Анимированное “свечение” в привлеченном владельцами Индикаторе выполнения (ListView/DataGridView)

Метод onDestroy запускается только тогда, когда активность уничтожается системой, что редко совпадает с тем, когда пользователь выходит из активности.

Возможно, вы захотите взглянуть на onPause или onStop и вообще взгляните на жизненный цикл активности Android , когда именно вы хотите, чтобы код выполнялся.

5
задан Aaronaught 17 November 2008 в 20:46
поделиться

1 ответ

Я должен был вытянуть некоторые довольно сумасшедшие трюки для создания этой работы. К сожалению, MSFT не обновил VisualStyleElement. Класс ProgressBar для добавления частей, что добавленная Vista. И конструктор является частным. И я должен был предположить немного части, которые производят анимацию. Я добрался, справедливо соглашаются с этим кодом, он должен дать Вам что-то для экспериментирования с:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using System.Reflection;

namespace WindowsFormsApplication1 {
  public partial class Form1 : Form {
    VisualStyleElement pulseOverlay;
    VisualStyleElement moveOverlay;
    VisualStyleRenderer pulseRenderer;
    VisualStyleRenderer moveRenderer;
    Timer animator = new Timer();
    public Form1() {
      InitializeComponent();
      ConstructorInfo ci = typeof(VisualStyleElement).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance,
        null, new Type[] { typeof(string), typeof(int), typeof(int) }, null);
      pulseOverlay = (VisualStyleElement)ci.Invoke(new object[] { "PROGRESS", 7, 0 });
      moveOverlay = (VisualStyleElement)ci.Invoke(new object[] { "PROGRESS", 8, 0 });
      pulseRenderer = new VisualStyleRenderer(pulseOverlay);
      moveRenderer = new VisualStyleRenderer(moveOverlay);
      animator.Interval = 20;
      animator.Tick += new EventHandler(animator_Tick);
      animator.Enabled = true;
      this.DoubleBuffered = true;
    }
    void animator_Tick(object sender, EventArgs e) {
      Invalidate();
    }

    int xpos;
    protected override void OnPaint(PaintEventArgs e) {
      Rectangle rc = new Rectangle(10, 10, 100, 20);
      ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rc);
      rc = new Rectangle(10, 10, 50, 20);
      ProgressBarRenderer.DrawHorizontalChunks(e.Graphics, rc);
      xpos += 3;
      if (xpos >= 30) xpos = -150;  // Note: intentionally too far left
      rc = new Rectangle(xpos, 10, 50, 20);
      pulseRenderer.DrawBackground(e.Graphics, rc);
      moveRenderer.DrawBackground(e.Graphics, rc);
    }
  }

}
5
ответ дан 14 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: