Stoppuhr in C# für Android

  • Antworten:10
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 21

03.05.2016, 17:49:27 via Website

Hey Leute ich habe dann wieder mal ne frage!
Und zwar bin ich seit längerem am überlegen wie ich eine Stoppuhr machen kann.
Im Internet finde ich nichts wirklich brauchbares.

Kann mir jemand erklären wie ich mit Xamarin in Visual Studio eine Stoppuhr basteln kann?

Danke! ;)

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

03.05.2016, 17:53:55 via Website

Was ist daran das Problem?
Du brauchst einen Start/Stopp Button und einen Timer und eine TextView/Label zum anzeigen der aktuell gestoppen Zeit.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 21

03.05.2016, 18:32:17 via Website

Ok, so weit bin ich auch schon.
Was ist mit dem Code? Mit dem komme ich nicht klar.
Was muss ich so grob machen?

Antworten
  • Forum-Beiträge: 8.173

03.05.2016, 18:43:31 via Website

Grob gesagt musst du verstehen, was zu tun ist und das dann programmtechnisch umsetzen.... ;)

if all else fails, read the instructions.

Antworten
  • Forum-Beiträge: 605

04.05.2016, 10:39:43 via Website

Ganz grob:

Timer bei Button-Klick starten, Wert des Timers (Millisekunden) in Format MM:SS umwandeln, Label anzeigen lassen, evtl. Label aktualisieren (sollte dies nicht automatisch geschehen), bei Button-Klick Timer stoppen und den letzten Wert formatiert als Label anzeigen lassen.

Antworten
  • Forum-Beiträge: 21

04.05.2016, 17:39:18 via Website

So habs jetzt mit nem Chronometer gemacht, funktioniert im Grunde.
Nur wie setze ich das Chronometer zurück,da ich wenn ich den text im Chronometer auf 00:00 setze und wieder starte es wieder von der vorherigen zeit losgeht zb. von 00:14 und ich kann nicht zufällig das Zeitformat in Sekunden und hundertstel (ss:ff) anzeigen lassen?

— geändert am 04.05.2016, 17:47:43

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

04.05.2016, 17:57:55 via Website

Zeig mal deinen Code.
Irgendwi muss man das chronometer auch resetten k;nnen. Oder du nimst gleich einen Timer mit verstellbarem Intervall, dann kannst du auch Millisekunden anzeigen.

— geändert am 04.05.2016, 17:58:05

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 21

04.05.2016, 18:06:39 via Website

namespace JFApp
  {
[Activity(Label = "Stopwatch", ScreenOrientation = ScreenOrientation.Portrait, Theme = "@style/android:Theme.Holo.Light", WindowSoftInputMode = SoftInput.AdjustResize)]
public class Stopwatch : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        RequestWindowFeature(WindowFeatures.NoTitle);
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Stopwatch);
        Button stoptimer = FindViewById<Button>(Resource.Id.stoptimer);
        Button starttimer = FindViewById<Button>(Resource.Id.starttimer);
        Chronometer timerview = FindViewById<Chronometer>(Resource.Id.timerview);

        starttimer.Click += (sender, e) =>
        {
            timerview.Start();
        };

        stoptimer.Click += (sender, e) =>
        {
            timerview.Stop();
        };

        stoptimer.LongClick += (sender, e) =>
        {
            timerview.Text = String.Format("00");
        };
    }
}
}

Das mit dem Timer wollte ich vorher auch machen aber den gibt es nicht, oder ich habe ihn einfach übersehen was ich nicht glaube

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.183

04.05.2016, 18:09:28 via Website

Chronometer kenne ich nicht, dafür aber den StandardTimer aus C# Desktop.
Den gibt es dort nämlcu auch:
https://developer.xamarin.com/api/type/System.Threading.Timer/
http://stackoverflow.com/questions/27196590/i-want-create-timer-thread-for-android-with-xamarin

Und damit hast du alles.
Evntl brauchst du noch eine StoppZeit varaible oder du nimmst die Zeitdifferenz geht genauso.

— geändert am 04.05.2016, 18:09:40

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 21

05.05.2016, 11:36:25 via Website

Danke Leute,
Ich habs jetzt im Grunde so wie ich es haben will, nur noch ein paar Kleinigkeiten.
(hug)

Antworten
  • Forum-Beiträge: 21

05.05.2016, 19:54:04 via Website

Oder doch nicht, hab es jetzt mit 2 Stoppuhren nachgestoppt und mein Programm ist langsamer wie die stoppuhren.
Woran kann das liegen?
(Programm 70 sec - Stoppuhr 74 sec)

    public class Stopwatch : Activity
{
    long counter;
    private System.Timers.Timer _timer;
    Button starttimer;
    Button stoptimer;
    Button resettimer;
    TextView timerview;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Stopwatch);
        stoptimer = FindViewById<Button>(Resource.Id.stoptimer);
        starttimer = FindViewById<Button>(Resource.Id.starttimer);
        resettimer = FindViewById<Button>(Resource.Id.resettimer);
        timerview = FindViewById<TextView>(Resource.Id.timerview);
        timerview.Text = Convert.ToString(counter / 100 + ":" + counter % 100);
        stoptimer.Enabled = false;
        resettimer.Enabled = false;

        starttimer.Click += delegate
        {
            counter = 0;
            _timer = new System.Timers.Timer();
            _timer.Interval = 10;
            _timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
            _timer.Enabled = true;
            _timer.Start();
            starttimer.Enabled = false;
            stoptimer.Enabled = true;
        };

        stoptimer.Click += delegate
        {
            _timer.Enabled = false;
            timerview.Text = counter / 100 + ":" + counter % 100;
            resettimer.Enabled = true;
            stoptimer.Enabled = false;
        };

        resettimer.Click += delegate
        {
            timerview.Text = "0:0";
            counter = 0;
            starttimer.Enabled = true;
            stoptimer.Enabled = false;
            resettimer.Enabled = false;
        };
    }
    private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e)
    {
        RunOnUiThread(delegate
        {
            counter++;
            string lz="";
            if ((counter % 100) < 10)
            {
                lz = "0";
            }

            timerview.Text = Convert.ToString(counter / 100 + ":"+lz + counter % 100);
        });
    }
}

— geändert am 05.05.2016, 19:57:12

Antworten

Empfohlene Artikel