타이머를 구현하고 싶어서 원형 프로그래스바로 타이머를 구현할려고 했는데, 애니메이션이 정상적으로 동작을 안하네요.
public class TimerActivity extends AppCompatActivity {
private ProgressBar pbTimer;
private TextView txtRemainTime;
private CountDownTimer countDownTimer;
private int restTime;
private int remainTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer);
pbTimer = findViewById(R.id.pbTimer);
txtRemainTime = findViewById(R.id.txtRemainingTime);
/** DB에서 휴식시간 받아와서 restTime에 할당 필요 */
restTime = 8; // 1000은 1초
startTimer(restTime,pbTimer);
}
/** btnFinish 이벤트 리스너 */
public void finishButtonClick(View view){
Intent intent = new Intent(TimerActivity.this,SelectExercise.class);
startActivity(intent);
finish();
}
/** btnPlus 이벤트 리스너 */
public void onPlusClick(View view){
restTime = remainTime + 11;
countDownTimer.cancel();
startTimer(restTime,pbTimer);
}
/** btnMinus 이벤트 리스너 */
public void onMinusClick(View view) {
if (restTime > 10) {
restTime = remainTime - 9;
countDownTimer.cancel(); // 기존 타이머 취소
startTimer(restTime,pbTimer);
} else {
restTime = 1;
countDownTimer.cancel();
startTimer(restTime,pbTimer);
}
}
public int getRemainTime(int remainTime){
return remainTime;
}
/** 타이머 설정 메소드 */
private void startTimer(final int restTime,ProgressBar progressBar){
if(countDownTimer != null){
countDownTimer.cancel();
}
countDownTimer = new CountDownTimer(restTime * 1000, 1000){
@Override
public void onTick(long millisUntilFinished){
int progress = restTime - (int) (millisUntilFinished / 1000); // 프로그레스바를 위한 값 계산
progressBar.setProgress(progress);
progressBar.setSecondaryProgress(progress + 1);
String timeLeft = String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) -
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished)),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)));
txtRemainTime.setText(timeLeft);
remainTime = (int)TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished);
getRemainTime(remainTime);
progressBar.setMax(restTime);
progressBar.setProgress(0);
progressBar.setSecondaryProgress(0);
ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", restTime);
animation.setDuration(restTime * 1000);
animation.setInterpolator(new LinearInterpolator());
animation.start();
}
@Override
public void onFinish(){
txtRemainTime.setTextColor(Color.RED);
// 알림음 코드... R.raw에 파일을 추가해야함
// MediaPlayer mediaPlayer = MediaPlayer.create(TimerActivity.this,R.raw.alarmsound);
// mediaPlayer.start();
Drawable progressDrawable = ContextCompat.getDrawable(TimerActivity.this, R.drawable.timer_progressbar_finished);
pbTimer.setProgressDrawable(progressDrawable);
pbTimer.invalidate();
/** 타이머가 종료되고 1초뒤에 자동으로 Intent 실행 */
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(TimerActivity.this,SelectExercise.class);
startActivity(intent);
finish();
}
},1000);
}
}.start();
countDownTimer.start();
}
}
진행된 시간만큼 프로그래스바 애니메이션으로 보여주고 싶은데 애니메이션이 동작을 안합니다.
btnPlus를 누르면 10초만큼 시간을 늘고, btnMinus를 누르면 시간이 10초만큼 줄어듭니다.
다른 부분은 정상적으로 동작하는데 애니메이션만 동작을 안하네요.
문제점이 뭔지 알려주시면 감사하겠습니다.
<ProgressBar
android:id="@+id/pbTimer"
style="@style/TimerProgressBar"
android:layout_width="350dp"
android:layout_height="350dp"
android:layout_marginTop="100dp"
android:indeterminate="false"
android:progressDrawable="@drawable/timer_progressbar"
android:backgroundTint="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
XML 코드입니다.