실습
안드로이드, 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도 전부 이해가 되지않는다
천천히 한번더 분석해봐야한다