실습

안드로이드, stopwatch

Do.K 2022. 4. 22. 19:31
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Chronometer
        android:id="@+id/chronometer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="150dp"
        android:gravity="center_horizontal"
        android:textSize="60dp"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="70dp">
        <Button
            android:id="@+id/startButton"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="Start"
            android:background="@drawable/round_button"
            android:textStyle="bold"/>
        <Button
            android:id="@+id/stopButton"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="Stop"
            android:background="@drawable/round_button"
            android:textStyle="bold"
            android:layout_marginLeft="25dp"
            android:enabled="false"/>
        <Button
            android:id="@+id/resetButton"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="Reset"
            android:background="@drawable/round_button"
            android:textStyle="bold"
            android:layout_marginLeft="25dp"
            android:enabled="false"/>

    </LinearLayout>

</RelativeLayout>

 

package com.example.stopwatch

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.SystemClock
import android.view.KeyEvent
import android.widget.Toast
import com.example.stopwatch.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    var initTime=0L     //
    var pauseTime = 0L  //멈춘시간 초기값


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

        val binding = ActivityMainBinding.inflate(layoutInflater)	//바인딩
        setContentView(binding.root)

        binding.startButton.setOnClickListener{	//샘기법사용해 실행문작성
            binding.chronometer.base = SystemClock.elapsedRealtime()+pauseTime
            binding.chronometer.start() 
            binding.stopButton.isEnabled = true
            binding.resetButton.isEnabled = true
            binding.startButton.isEnabled = false
        }

        binding.stopButton.setOnClickListener{
            pauseTime = binding.chronometer.base - SystemClock.elapsedRealtime()
            binding.chronometer.stop()
            binding.stopButton.isEnabled = false
            binding.startButton.isEnabled = true
            binding.resetButton.isEnabled = true
        }

        binding.resetButton.setOnClickListener{
            pauseTime = 0L
            binding.chronometer.base = SystemClock.elapsedRealtime()
            binding.chronometer.stop()
            binding.stopButton.isEnabled = false
            binding.startButton.isEnabled = true
            binding.resetButton.isEnabled = false
        }
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        if(keyCode==KeyEvent.KEYCODE_BACK) {
            if (System.currentTimeMillis() - initTime>3000){
                Toast.makeText(this, "종료하려면 한번 더 누르세요!!",
                Toast.LENGTH_SHORT).show()
                initTime= System.currentTimeMillis()
                return true
            }
        }
        return super.onKeyDown(keyCode, event)
    }
}

 

 책으로 배우다보니,, 이해가 되는거보단 안 되는게 많다!!!

이거저거 바꿔가며 이해해보려 하는데

binding.chronometer.base = SystemClock.elapsedRealtime() 

SystemClock.elapsedRealtime() 은 시스템이 부팅된 시점부터 흐른 시간이라고 설명되어있는데

리셋시 어떻게 0으로 초기화가 되는지 이해가 안된다. 

그렇기에 start, stop도 전부 이해가 되지않는다

천천히 한번더 분석해봐야한다