이번시간에는 스마트폰 시계앱에 들어있는 타이머기능을 만들어보겠습니다.
기능은 간단합니다. 시,분,초를 입력할 수 있는 입력창을 3개 만들고, 시작 버튼을 누르면
타이머가 실행됩니다. 타이머에는 일시정지기능과, 취소기능이 들어갑니다.
1. 화면구현(activity_main.xml)
<?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">
<FrameLayout
android:id="@+id/setting"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="95dp"
android:layout_marginLeft="70dp"
android:text="시"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="95dp"
android:layout_marginLeft="120dp"
android:text="분"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="95dp"
android:layout_marginLeft="170dp"
android:text="초"/>
<EditText
android:id="@+id/hour"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="center_horizontal"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="100dp"
android:layout_marginLeft="50dp"
android:inputType="number"
android:hint="00" />
<EditText
android:id="@+id/min"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="center_horizontal"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="100dp"
android:layout_marginLeft="100dp"
android:inputType="number"
android:hint="00" />
<EditText
android:id="@+id/second"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="center_horizontal"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginTop="100dp"
android:layout_marginLeft="150dp"
android:inputType="number"
android:hint="00" />
<Button
android:id="@+id/countdown_button"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="150dp"
android:layout_marginLeft="50dp"
android:text="시작" />
</FrameLayout>
<FrameLayout
android:id="@+id/timer"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/countdown_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="95dp"
android:text="01:10:00"
android:textSize="50dp" />
<Button
android:id="@+id/stop_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="185dp"
android:text="일시정지"
/>
<Button
android:id="@+id/cancel_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="200dp"
android:layout_marginTop="185dp"
android:text="취소"
/>
</FrameLayout>
</LinearLayout>
2. 기능구현(MainActivity.java)
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView countdownText; //타이머 현황
private Button startButton; //시작버튼
private Button stopButton; //정지버튼
private Button cancelButton;//취소버튼
private EditText hourText; //시
private EditText minText; //분
private EditText secondText;//초
private CountDownTimer countDownTimer;
private boolean timerRunning;// 타이머 상태
private boolean firstState; // 처음인지 아닌지?
private long time = 0;
private long tempTime = 0;
FrameLayout setting; //셋팅화면
FrameLayout timer; //타이머화면
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
countdownText = findViewById(R.id.countdown_text);
startButton = findViewById(R.id.countdown_button); //시작
stopButton = findViewById(R.id.stop_btn); //정지
cancelButton = findViewById(R.id.cancel_btn);//취소
hourText = findViewById(R.id.hour);//시
minText = findViewById(R.id.min); //분
secondText = findViewById(R.id.second);//초
setting = findViewById(R.id.setting);
timer = findViewById(R.id.timer);
//타이머 시작
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
firstState = true;
setting.setVisibility(setting.GONE); //설정 사라짐
timer.setVisibility(timer.VISIBLE);//타이머 생김
startStop();
}
});
//일시정지
stopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startStop();
}
});
//취소
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setting.setVisibility(setting.VISIBLE); //설정 생김
timer.setVisibility(timer.GONE);//타이머 사라짐
firstState = true;
stopTimer();
}
});
updateTimer();
}
//타이머 상태에 따른 시작&정지
private void startStop() {
if(timerRunning){ //시작이면 정지
stopTimer();
}else{
startTimer(); //정지면 시작
}
}
//타이머구현
private void startTimer() {
//처음이면 설정 타이머값을 사용한다.
if(firstState){
String sHour = hourText.getText().toString();
String sMin = minText.getText().toString();
String sSecond = secondText.getText().toString();
time = (Long.parseLong(sHour) * 3600000) + (Long.parseLong(sMin) * 60000) + (Long.parseLong(sSecond)*1000) + 1000;
}else{
time = tempTime;
}
countDownTimer = new CountDownTimer(time, 1000) {
@Override
public void onTick(long millisUntilFinished) {
tempTime = millisUntilFinished;
updateTimer();
}
@Override
public void onFinish() { }
}.start();
stopButton.setText("일시정지");
timerRunning = true;
firstState = false;
}
//타이머 정지
private void stopTimer() {
countDownTimer.cancel();
timerRunning = false;
stopButton.setText("계속");
}
//시간업데이트
private void updateTimer() {
int hour = (int) tempTime / 3600000;
int minutes = (int) tempTime % 3600000 / 60000;
int seconds = (int) tempTime % 3600000 % 60000 / 1000;
String timeLeftText = "";
timeLeftText = "" + hour + ":";
if(minutes < 10) timeLeftText += "0";
timeLeftText += minutes +":";
//초가 10보다 작으면 0이 붙는다.
if(seconds < 10) timeLeftText += "0";
timeLeftText += seconds;
countdownText.setText(timeLeftText);
}
}
3. 실행화면
[안드로이드] 뒤로가기버튼 두 번 눌러 종료하기 예제 (0) | 2020.12.02 |
---|---|
[안드로이드]스톱워치(StopWatch) 만들어보기 (0) | 2020.12.02 |
[안드로이드] 액티비티에서 액티비티로 데이터 보내기 (0) | 2020.11.26 |
[안드로이드] Toast 메시지 띄우는 방법 (0) | 2020.11.22 |
[안드로이드]로또번호 생성(TextView, Button,HashSet, ArrayList) (0) | 2020.11.11 |
댓글 영역