상세 컨텐츠

본문 제목

[안드로이드 코틀린] 스톱워치 StopWatch 쉽게 만드는 방법

안드로이드

by aries574 2022. 10. 3. 14:59

본문


이번 시간에는 스톱워치(StopWatch) 만드는 방법에 대하여 알아보겠습니다. 

안드로이드에서는 Chronometer을 통해 스톱워치를 쉽게 만들 수 있습니다.


목차

1. 실행 화면
2. 메인 화면 activity_main.xml
3. 메인 코드 MainActivity.kt


1. 실행 화면

 


2. 메인 화면 activity_main.xml

- 설명 -

 1. 스톱워치를 보여주는 Chronometer

 2. 스톱워치 시작하는 Button

 3. 스톱워치 정지하는 Button

 4. 스톱워치 초기화하는 Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Chronometer
        android:id="@+id/chronometer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:gravity="center_horizontal"
        android:textSize="30sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <Button
            android:id="@+id/startBtn"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="start" />

        <Button
            android:id="@+id/stopBtn"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:text="stop" />

        <Button
            android:id="@+id/resetBtn"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:text="reset" />
    </LinearLayout>
</LinearLayout>

 

 

3. 메인 코드 MainActivity.kt

- 설명 -

 1. chronometer.base

   스톱워치 기본 설정

 2. SystemClock.elapsedRealtime()

   부팅하고 이후 시간 

 3. chronometer.start()

   스톱워치 시작

 4. chronometer.stop()

   스톱워치 정지

 5. viewMode(mode: String)

   버튼 활성화/비활성화 함수

class MainActivity : AppCompatActivity() {

    lateinit var startBtn: Button
    lateinit var stopBtn: Button
    lateinit var resetBtn: Button

    var running: Boolean = false // 상태
    var pauseTime = 0L //멈춤 시간

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

        val chronometer: Chronometer = findViewById(R.id.chronometer)
        startBtn = findViewById(R.id.startBtn)
        stopBtn = findViewById(R.id.stopBtn)
        resetBtn = findViewById(R.id.resetBtn)

        //화면 설정
        viewMode("stop")

        //시작 이벤트
        startBtn.setOnClickListener {

            //정지 상태일때만 실행
            if(!running){
                //기본 셋팅
                chronometer.base = SystemClock.elapsedRealtime() - pauseTime

                //시작
                chronometer.start()

                //화면 설정
                viewMode("start")
            }
        }

        //정지 이벤트
        stopBtn.setOnClickListener {

            //실행 상태일때만 실행
            if(running){
                //정지
                chronometer.stop()

                //정지 시간 저장
                pauseTime = SystemClock.elapsedRealtime() - chronometer.base

                //화면 설정
                viewMode("stop")
            }
        }

        //초기화 이벤트
        resetBtn.setOnClickListener {
            //기본 셋팅
            chronometer.base = SystemClock.elapsedRealtime()

            //정지 시간 초기화
            pauseTime = 0L

            //정지
            chronometer.stop()

            //화면 설정
            viewMode("stop")
        }

    }//onCreate

    //화면 설정
    private fun viewMode(mode: String){

        //활성화 처리
        if(mode == "start"){
            startBtn.isEnabled = false
            stopBtn.isEnabled = true
            resetBtn.isEnabled = true
            running = true
        }else{
            startBtn.isEnabled = true
            stopBtn.isEnabled = false
            resetBtn.isEnabled = false
            running = false
        }
    }
}

2022.09.30 - [안드로이드] - [안드로이드 코틀린] HTTP Glide 이미지 쉽게 보여주는 방법

 

[안드로이드 코틀린] HTTP Glide 이미지 쉽게 보여주는 방법

이번 시간에는 Glide 라이브러리를 이용해서 이미지 쉽게 보여주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 권한 등록 3. 라이브러리 등록 4. 메인 화면 activity_main.xml 5. 메인 코드 Main

aries574.tistory.com

2022.09.28 - [안드로이드] - [안드로이드 코틀린] HTTP 통신 Retrofit2 사용법 part1 - 권한 및 설정

 

[안드로이드 코틀린] HTTP 통신 Retrofit2 사용법 part1 - 권한 및 설정

Retrofit2 라이브러리를 이용해서 HTTP 통신을 하는 방법을 알아보겠습니다. 이번 시간에는 권한 및 설정을 하겠습니다. 목차 1. 권한 등록 2. 라이브러리 등록 3. 모델 클래스 4. 서비스 인터페

aries574.tistory.com

2022.09.22 - [안드로이드] - [안드로이드 코틀린] RecyclerView 다중 선택 색상 변경하는 방법

 

[안드로이드 코틀린] RecyclerView 다중 선택 색상 변경하는 방법

이번 시간에는 RecyclerView로 만든 리스트의 아이템 다중 선택하는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 아이템 클래스 Item.kt 3. 아이템 화면 list_item.xml 4. 아이템 어댑터 ItemAdapte..

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역