반응형
아래와 같은 스톱워치를 만들어보자
build.gradle.kts(Module)
- 원래 소스에 아래 문장을 추가해 준것 밖에 없음 .
viewBinding.isEnabled = true
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.jetbrains.kotlin.android)
}
android {
namespace = "com.example.ch8_3"
compileSdk = 34
defaultConfig {
applicationId = "com.example.ch8_3"
minSdk = 34
targetSdk = 34
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
viewBinding.isEnabled = true
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
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="100dp"
android:gravity="center_horizontal"
android:textSize="60dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="70dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<Button
android:id="@+id/startButton"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Start"
android:textColor="#FFFFFF"
android:textStyle="bold"
/>
<Button
android:id="@+id/stopButton"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:enabled="false"
android:text="Stop"
android:textColor="#FFFFFF"
android:textStyle="bold"/>
<Button
android:id="@+id/resetButton"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:enabled="false"
android:text="Reset"
android:textColor="#FFFFFF"
android:textStyle="bold"/>
</LinearLayout>
</RelativeLayout>
MainActivity.kt
package com.example.ch8_3
import android.os.Bundle
import android.os.SystemClock
import android.view.KeyEvent
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.ch8_3.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
//뒤로 가기 버튼을 누른 시각을 저장하는 속성
var initTime = 0L
//멈춘 시각을 저장하는 속성
var pauseTime = 0L
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//start버튼이 눌렸을때 리스너
binding.startButton.setOnClickListener{
binding.chronometer.base = SystemClock.elapsedRealtime() + pauseTime
binding.chronometer.start()
//버튼 표시 여부 조정
binding.stopButton.isEnabled = true //버튼 enable 처리
binding.resetButton.isEnabled = true
binding.startButton.isEnabled = false
}
//stop버튼이 눌렸을때 리스너
binding.stopButton.setOnClickListener{
pauseTime = binding.chronometer.base - SystemClock.elapsedRealtime()
//현재 시점에서 크로노미터가 시작된 시점을 빼서, 크로노미터가 경과한 시간을 계산합니다.
binding.chronometer.stop() //멈춤
binding.stopButton.isEnabled = false //버튼 enable 처리
binding.resetButton.isEnabled = true
binding.startButton.isEnabled = true
}
//reset버튼이 눌렸을때 리스너
binding.resetButton.setOnClickListener{
pauseTime = 0L //초기화함
binding.chronometer.base = SystemClock.elapsedRealtime() //시스템 시간을 가져옴
binding.chronometer.stop()
binding.stopButton.isEnabled = false //버튼 enable 처리
binding.resetButton.isEnabled = false
binding.startButton.isEnabled = true
}
}
//뒤로가기 버튼 핸들러
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
//뒤로가기 버튼을 눌렀을 때 처리
if (keyCode === KeyEvent.KEYCODE_BACK){
//뒤로가기 버튼을 처음 눌렀거나 누른지 3초가 지났을 때 처리
if(System.currentTimeMillis() - initTime > 3000){
Toast.makeText(this, "종료하려면 한번 더 누르세요",
Toast.LENGTH_SHORT).show()
initTime = System.currentTimeMillis()
return true
}
}
return super.onKeyDown(keyCode, event)
}
}
출처 : https://kkangsnote.tistory.com/
'프로그래밍 > 안드로이드(코틀린)' 카테고리의 다른 글
안드로이드 2 - 다양한 언어 지원 앱 및 가로 화면 만들기 예제 (1) | 2024.08.31 |
---|