16 Stimmen

Millisekunden mit Android Chronometer anzeigen

Ich suche nach einer Möglichkeit, den Chronometer in Android (vorzugsweise 1.6 und höher) dazu zu bringen, Zehntelsekunden beim Hochzählen anzuzeigen.

Ist es möglich, dies zu tun? Wenn nicht, gibt es eine kostenlose (und vorzugsweise quelloffene) Bibliothek, die das Gleiche tut? Wenn das nicht geht, werde ich meine eigene schreiben, aber ich würde lieber die von jemand anderem benutzen!

16voto

antoniom Punkte 2926

Das Standard-Chronometer-Widget von Android unterstützt keine Millisekunden-Formatierung.

Ich habe den Quellcode des Chronometer-Widgets geändert, um Millisekunden anzeigen zu können. Laden Sie ihn herunter von github .

5voto

CommonsWare Punkte 950864

Ist es möglich, dies zu tun?

Nicht wirklich. Sie könnten einen Formatstring übergeben, der Zehntelsekunden anzeigt, aber die Chronometer selbst wird nur jede Sekunde aktualisiert. Die Aktualisierungshäufigkeit ist in den Code eingebettet.

Wenn nicht, gibt es eine kostenlose (und vorzugsweise quelloffene) Bibliothek, die die das Gleiche tut?

El Chronometer source ist unter der Apache License 2.0 verfügbar, so dass Sie es nach Belieben verändern können. Finde alle Vorkommen von 1000 und ändern Sie sie in 100 und Sie haben wahrscheinlich den größten Teil des Weges hinter sich.

Beachten Sie, dass diese Chronometer kann in einer Aktivität verwendet werden, aber nicht in einem App-Widget, da angepasste View Klassen werden von dem App-Widget-Framework nicht unterstützt.

0 Stimmen

Ihr Link ist nicht mehr verfügbar.

1voto

Bharat Ahuja Punkte 11

Ich habe eine Instanz einer Klasse erstellt, die ich innerhalb der Activity . Diese neue Klasse war eine Erweiterung des Android CountDownTimer Klasse (fügen Sie die implementierten Methoden hinzu)

Hier im Konstruktor können Sie die Dauer in Millisekunden und das Intervall auf 1/10 einer Sekunde, also 100 Millisekunden, festlegen. In der onTick Methode werden die Befehle alle 1/100 Sekunden für die angegebene Dauer ausgeführt. Das sollte funktionieren.

1voto

Hissaan Ali Punkte 1771

Zeitzähler ist eine Bibliothek, die genau das Gleiche tut. Sie müssen sich keine Gedanken mehr über das Addieren und Subtrahieren von Zeit machen, wenn Sie Ihre Stoppuhr anhalten/fortsetzen. Ich bin sicher, das wird Ihnen den Tag versüßen.

0voto

package ar.com.magiapensada.apps.dayoftheweek;

import androidx.appcompat.app.AppCompatActivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    public static final int NANOSECONDS_CONVERT = 1000000000;
    public static final int MICROSECONDS_CONVERT = 1000;
    public static final int SEXAGESIMA_CONVERT = 60;
    public static final int SEXAGESIMA_FORMAT_CONVERT = 2;
    public static final String BROADCAST_TIME_UPDATE = "BROADCAST_TIME_UPDATE";
    private Button start;
    private TextView tiempo;
    private long inicio;
    private Long terminado=null;
    private boolean running=false;
    private Button stop;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.tiempo = (TextView) findViewById(R.id.tiempo);

        this.start = (Button) findViewById(R.id.start);
        this.stop = (Button) findViewById(R.id.stop);

        BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

            @Override
            public void onReceive(Context arg0, Intent intent) {
                String action = intent.getAction();
                if (action.equals(BROADCAST_TIME_UPDATE)) {

                    if ( terminado != null){
                        String cronometro = getCronometroValue(terminado);
                        tiempo.setText(cronometro);
                        terminado=null;
                    }else{
                        String cronometro = getCronometroValue(System.nanoTime());
                        tiempo.setText(cronometro);

                    }
                }

            }
        };
        registerReceiver(broadcastReceiver, new IntentFilter(BROADCAST_TIME_UPDATE));

        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity.this.inicio = System.nanoTime();
                Thread t = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        running=true;
                        terminado=null;
                        while(running){
                            sendBroadcast();
                        }

                        sendBroadcast();

                    }
                });
                t.start();
            }
        });

        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                terminado = System.nanoTime();
                running=false;

            }
        });

    }

    private void sendBroadcast() {
        Intent intent = new Intent(BROADCAST_TIME_UPDATE);
        MainActivity.this.sendBroadcast(intent);
    }

    private String getCronometroValue(long actual) {
        long dif = actual - MainActivity.this.inicio;

        long segundos = dif/ NANOSECONDS_CONVERT;
        long mili = dif - (segundos*NANOSECONDS_CONVERT);
        mili = mili/ MICROSECONDS_CONVERT;

        long minutos = segundos / SEXAGESIMA_CONVERT;
         segundos = segundos % SEXAGESIMA_CONVERT;

         String segString = formatSexagesima(segundos);
        String minutosString = formatSexagesima(minutos);

        String cronometro =  minutosString + ":" + segString + ":" + mili;
        return cronometro;
    }

    private String formatSexagesima(long value ){
        return String.format("%0" + SEXAGESIMA_FORMAT_CONVERT + "d", value);
    }

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X