J'essaie de tirer une valeur de chaîne égale au moment où le chronomètre s'arrête comme dans "01:21" mais le temps écoulé donne une valeur entière, comme dans "11322".

val chronometer = findViewById<Chronometer>(R.id.chronometer)
chronometer.base = SystemClock.elapsedRealtime()
chronometer.format = "%s"
chronometer.start()
button.setOnClickListener {
    val elapsedTime = SystemClock.elapsedRealtime() - chronometer.base
    header.text = elapsedtime.toString()
    Toast.makeText(this,"$elapsedTime",Toast.LENGTH_SHORT).show()
}
0
awh 28 août 2020 à 20:37

2 réponses

Meilleure réponse

Pour être précis, vous obtenez une valeur longue et non un entier car SystemClock.elapsedRealtime() et chronometer.base renvoient une valeur longue.

Je dois vous décevoir, actuellement il n'y a aucun moyen d'obtenir directement l'heure affichée d'un chronomètre, mais bien sûr, vous pouvez convertir les millisecondes que vous avez en minutes et secondes, afin de pouvoir l'afficher à nouveau.


Voici mon exemple de comment cela pourrait fonctionner:

private fun calculateTime(chronometerMillis : Long) {
    val minutes = TimeUnit.MILLISECONDS.toMinutes(chronometerMillis)
    val seconds = TimeUnit.MILLISECONDS.toSeconds(chronometerMillis) - (minutes * 60)

    println("Recreated time: $minutes:$seconds")
}

Si vous appelez maintenant cette méthode avec la valeur 81000, qui est de 1 minute et 21 secondes (tout comme votre chronomètre), elle imprime Recreated time: 1:21.


Pour l'utiliser dans votre projet, renvoyez simplement une chaîne:

private fun calculateTime(chronometerMillis : Long) : String {
    val minutes = TimeUnit.MILLISECONDS.toMinutes(chronometerMillis)
    val seconds = TimeUnit.MILLISECONDS.toSeconds(chronometerMillis) - (minutes * 60)

    return "$minutes:$seconds"
}
0
Cyb3rKo 28 août 2020 à 18:30
private  fun formattedChronometer(chronometer: Chronometer): String {
    val elapsedTime = SystemClock.elapsedRealtime() - chronometer.base
    val time = elapsedTime / 1000
    val minutes = time / 60
    val seconds = time % 60
    return String.format("%02d:%02d",minutes,seconds)
}

J'ai réussi à le résoudre à l'aide de cette fonction après avoir consulté la documentation

0
awh 28 août 2020 à 20:05