본문 바로가기

JAVA/Android

[JAVA][Android] ProgressBar 부드럽게 증가/감소 시키기 : ObjectAnimator 활용

본 포스팅에서는 아래와 같은 안드로이드 ProgressBar에

애니메이션을 적용하여 부드럽게 증가/감소시키는 로직을 기록하겠다.

 

 

ObjectAnimator를 이용하면 ProgressBar에 애니메이션을 적용시킬수 있다.

private void setProgressAnimate(ProgressBar pb) {
    ObjectAnimator animation = ObjectAnimator.ofInt(pb, "progress", pb.getProgress(), (int) ((time+30*1000)/1000/1.2));
    animation.setDuration(1000);
    animation.setInterpolator(new DecelerateInterpolator());
    animation.start();
    animation.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation, boolean isReverse) {
         //애니메이션 종료 뒤에 타는 로직
        }
    });

    time = time + 30 * 1000;
}

ObjectAnimator.ofInt(프로그레스바 객체, 현재 progress, 목표하는 progress) 형식으로 지정한 뒤

animation을 start시켜주기만 하면 된다.

animation의 setInterpolator 속성은 시작시점에서 종료시점까지의 가속화 옵션이다.

 

Interpolator 설명
AccelerateDecelerate 시작 시점에 가속, 종료 시점에 감속
Accelerate 시작 시점에 가족
Anticipate 시작 시점의 앞으로 조금 이동한 뒤 종료 시점에 도착
Overshoot 종료 시점을 조금 초과하여 이동한 뒤 다시 되돌아와 종료
시점에 도착
Bounce 종료 시점에 도착한 뒤 잠시 튀어오르는 애니메이션 표시
Cycle 종료 시점에 도착한 뒤 시작 시점으로 돌아간 후, 다시 종료 시점으로 되돌아감
Decelerate 종료 시점에 가속
Linear  기본값으로 , 동일 속도로 시작 시점에서 종료 시점으로 이동

 

또 애니메이션 객체에 AnimatorListenerAdapter를 추가하여 원하는 시점에 다음 동작을 실행하도록 작업이 가능하다.