2017-12-05 10 views
0

in meiner App habe ich eine einfache TextView, die Zahlen zählen soll animiert herunter zählen. Da die Animator-Klasse alles hat, was das tun würde, habe ich meine eigene Animation mit einem Timer erstellt. Grundsätzlich, jedes Mal, wenn der Timer abgelaufen ist (alle 0,01 Sekunden), subtrahiert die Ganzzahl, die auf meinen Textansichten angezeigt wird, 10 von selbst und zeigt sie dann erneut in der Textansicht an. Das sieht wie folgt aus:Xamarin, Android: Timer zu animieren Text stoppt nach 1 Sekunde

private void CountHOFNumbers() 
    { 

     int intHofNumber = 999999; 

     System.Timers.Timer timer = new System.Timers.Timer(); 

     timer.Interval = 10; 
     timer.Elapsed += delegate 
     { 
      intHofNumber -= 10; 
      txtHof.Text = "# " + formatAp(intHofNumber); 
     }; 
     timer.Enabled = true; 
     timer.Start(); 

    } 

Es funktioniert, aber nach nur einem secnd der Timer stoppt. Die App stürzt ab, sie zählt einfach nicht mehr herunter. Es ist auch nie die exakt gleiche Nummer, auf der es anhält - manchmal ist es bei 999.913 - dann ist es wie 999.324 und so weiter. Aber es läuft nie länger als etwa 1,5 Sekunden. Das stört mich wirklich. Außerdem vibriert mein Handy von einem anderen Thread. Der Timer scheint immer zu stoppen, wenn die Vibration eingeschaltet ist. Gibt es eine Chance, dass sie korrelieren? Oder mache ich einfach alles falsch? Ich würde etwas Hilfe lieben! Vielen Dank!

+0

das könnte Ursache sein, weil Sie diese Methode vom Konstruktor aufgerufen haben, die nicht sicherstellt, dass es auf dem Haupt/ui-Thread verarbeitet wird – Csharpest

Antwort

0

Und hier ist die Lösung:

RunOnUiThread(() => txtHof.Text = "# " + formatAp(intHofStartNumber)); 

I'ts weired aber, dass es begann und dann stoppt. Es sollte nicht begonnen haben, damit anzufangen, aber irgendwie - das behebt mein Problem :)

Verwandte Themen