화면 개발
로직을 짠다.
package com.yujinoh.alarm;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;
import com.daimajia.androidanimations.library.Techniques;
import com.daimajia.androidanimations.library.YoYo;
public class MainActivity extends AppCompatActivity {
// 멤버변수를 만든다.
ImageView imgAlarm;
TextView txtTime;
TextView editTime;
Button btnStart;
Button btnCancel;
CountDownTimer timer;
int time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgAlarm = findViewById(R.id.imgAlarm);
txtTime = findViewById(R.id.txtTime);
editTime = findViewById(R.id.editTime);
btnCancel = findViewById(R.id.btnCancel);
btnStart = findViewById(R.id.btnStart);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (timer != null){ // 타이머 시작을 여러번 눌렀을 때 오류나지 않게 한다
return;
}
// 1. 유저가 입력한 시간을 가져온다
String strTime = editTime.getText().toString().trim();
// 1-1. 유저가 아무것도 입력 안했는지 검사
if(strTime.isEmpty()){
Toast.makeText(MainActivity.this, "시간을 입력해주세요", Toast.LENGTH_SHORT).show();
return;
}
time = 0;
try{
time = Integer.parseInt(strTime);
} catch (Exception e){
Toast.makeText(MainActivity.this, "숫자를 입력하세요", Toast.LENGTH_SHORT).show();
return;
}
long countTime = time * (long)1000; //1초에 1000밀리세컨즈 이다.
// 2. 타이머를 만든다
timer = new CountDownTimer(countTime, 1000) { //1초씩 줄어든다.
@Override
public void onTick(long millisUntilFinished) {
// 1초씩 감소할때마다 하고싶은 일을 코딩.
// 화면에 표시하는 것을 여기서 한다.
long remain = millisUntilFinished / 1000;
txtTime.setText(remain + "초");
}
@Override
public void onFinish() {
// 소리나도록 한다.
MediaPlayer mp = MediaPlayer.create(MainActivity.this, R.raw.alarm);
mp.start();
// 흔들리도록 한다.
YoYo.with(Techniques.Shake).duration(400).repeat(4).playOn(imgAlarm);
timer = null; // 타이머 시작을 여러번 눌렀을 때 오류나지 않게 끝나면 null로 만들어준다
};
// 3. 타이머를 시작한다
timer.start();
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 1. 타이머를 취소한다.
if (timer != null){
timer.cancel();
timer = null;
}
// 2. 유저에게 표시하는 텍스트뷰의 초를 초기화한다.
if (time == 0){
txtTime.setText("남은시간");
} else {
txtTime.setText(time + "초");
}
}
});
}
}
'Android' 카테고리의 다른 글
안드로이드 스튜디오 인텐트(Intent) : 두 액티비티 간 데이터 전달하기 (0) | 2024.06.07 |
---|---|
안드로이드 스튜디오 동일한 어플리케이션(application)이 여러 개 생성되었을 때 해결 방법 (0) | 2024.06.07 |
안드로이드 스튜디오에 음악, 비디오 리소스 파일 넣는 방법 (0) | 2024.06.05 |
안드로이드 스튜디오 퀴즈 풀면 정답 알려주는 app 개발 (0) | 2024.06.05 |
AlertDialog 경고 팝업 나타나게 하기, 메인액티비티 종료하는 finish 함수 (0) | 2024.06.05 |