Как сделать секундомер с handler на kotlin?

Пользователь

от felix , в категории: Другие , 2 года назад

Как сделать секундомер с handler на kotlin?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от karen.wisozk , 2 года назад

@felix 

Для создания секундомера с использованием Handler в Kotlin, вы можете использовать следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Stopwatch {
    private var startTime: Long = 0
    private var elapsedTime: Long = 0
    private var isRunning: Boolean = false

    private val handler = Handler()
    private val tick = object : Runnable {
        override fun run() {
            val now = System.currentTimeMillis()
            elapsedTime += now - startTime
            startTime = now
            val minutes = (elapsedTime / 1000) / 60
            val seconds = (elapsedTime / 1000) % 60
            val milliseconds = elapsedTime % 1000
            val time = String.format("%02d:%02d:%03d", minutes, seconds, milliseconds)
            onTickListener?.onTick(time)
            handler.postDelayed(this, INTERVAL)
        }
    }

    private var onTickListener: OnTickListener? = null

    fun start() {
        if (!isRunning) {
            startTime = System.currentTimeMillis()
            handler.post(tick)
            isRunning = true
        }
    }

    fun stop() {
        if (isRunning) {
            handler.removeCallbacks(tick)
            isRunning = false
        }
    }

    fun reset() {
        elapsedTime = 0
        onTickListener?.onTick("00:00:000")
    }

    fun setOnTickListener(listener: OnTickListener) {
        onTickListener = listener
    }

    interface OnTickListener {
        fun onTick(time: String)
    }

    companion object {
        private const val INTERVAL = 10L // update interval in milliseconds
    }
}


Этот класс предоставляет методы start(), stop() и reset(), чтобы запускать, останавливать и сбрасывать секундомер. Он также определяет интерфейс OnTickListener, который позволяет уведомлять слушателей о прошедшем времени в определенные моменты времени.


Чтобы использовать класс Stopwatch, создайте экземпляр класса и установите слушатель для обработки событий тика:

1
2
3
4
5
6
7
8
val stopwatch = Stopwatch()
stopwatch.setOnTickListener(object : Stopwatch.OnTickListener {
    override fun onTick(time: String) {
        // обновлять UI с текущим временем
    }
})

stopwatch.start() // запуск секундомера


Этот код запустит секундомер и обновляет UI каждые 10 миллисекунд с текущим временем, используя метод onTick() слушателя. Вы можете настроить интервал обновления, изменив значение константы INTERVAL в классе Stopwatch.

Пользователь

от vladimir , 7 месяцев назад

@felix 

Вот пример того, как можно использовать класс Stopwatch для создания секундомера и отображения времени в TextView:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class MainActivity : AppCompatActivity() {

    private lateinit var stopwatch: Stopwatch
    private lateinit var timeTextView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        timeTextView = findViewById(R.id.timeTextView)

        stopwatch = Stopwatch()
        stopwatch.setOnTickListener(object : Stopwatch.OnTickListener {
            override fun onTick(time: String) {
                runOnUiThread {
                    timeTextView.text = time
                }
            }
        })

        findViewById<Button>(R.id.startButton).setOnClickListener {
            stopwatch.start()
        }

        findViewById<Button>(R.id.stopButton).setOnClickListener {
            stopwatch.stop()
        }

        findViewById<Button>(R.id.resetButton).setOnClickListener {
            stopwatch.reset()
        }
    }
}


В этом коде создается MainActivity, в котором инициализируется класс Stopwatch и устанавливается слушатель для обновления текстового поля timeTextView с текущим временем. Также добавлены кнопки для запуска, остановки и сброса секундомера.


Не забудьте добавить разметку для activity_main.xml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/timeTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:text="00:00:000"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="16dp"/>

    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start"
        android:layout_below="@id/timeTextView"
        android:layout_marginTop="16dp"/>

    <Button
        android:id="@+id/stopButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Stop"
        android:layout_toEndOf="@id/startButton"
        android:layout_marginStart="16dp"
        android:layout_below="@id/timeTextView"
        android:layout_marginTop="16dp"/>

    <Button
        android:id="@+id/resetButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Reset"
        android:layout_toEndOf="@id/stopButton"
        android:layout_marginStart="16dp"
        android:layout_below="@id/timeTextView"
        android:layout_marginTop="16dp"/>

</RelativeLayout>


Этот код позволит вам создать секундомер с handler на Kotlin в вашем Android-приложении.