본문으로 바로가기

SeekBar 상태 변경하기


[상황]



Seekbar의 상태를 변경해 주고 싶다면, setProgress()함수를 이용합니다.

사용예는 아래와 같습니다.



[방법]

      setProgress() 함수[각주:1]는 오버로딩되어있기 때문에, 필요에 따라 2가지로 구분하여 사용 가능합니다.


1. 애니메이션 필요 없는 경우에 사용합니다(해당 지점으로 바로 순간 ! 이동)

seekBar.setProgress[각주:2](seekBar_R.getProgress()+1);  

//seekBar.setProgress(원하는 위치 값);


getProgress()를 추가적으로 이용해 [+]버튼을 누를 때 현재 값에서 시작해 1씩 증가하도록 구현한 것입니다.

(위의 코드 라인을 [+]버튼의 클릭 이벤트 리스너 안에 넣어줌)



2. 애니메이션 필요한 경우에 사용합니다(해당 지점으로 움직이는 효과도 함께 제공)

seekBar.setProgress[각주:3](seekBar_R.getProgress()+20, true);  

// 두번째 인자로 true값을 주면 애니메이션 효과를 제공합니다.



[정리]

setProgress()함수는 아래 두가지 경우로 오버로딩되어있다. 애니메이션 효과 필요 여부에 따라 구분하여 사용한다.
seekBar.setProgress(위치 int값)    //애니메이션 없는 움직임
seekBar.setProgress(위치 int값, true/false)  //boolean 값은 애니메이션 여부


-끝.




[추가 Study]

1. setProgress() 함수

public void setProgress(int progress) { 

setProgressInternal(progress, falsefalse);

}


위 함수는 Visual Position을 바로 이동시킨다.

Animation 효과가 필요하면 아래 함수를 사용해야 한다.


public void setProgress(int progress, boolean animate) { 

setProgressInternal(progress, false, animate);

}


내부에서 setProgressInternal()함수를 호출한다.

 

2. setProgressInternal() 함수

refreshProgress()함수를 내부 호출하고 있기 때문에, 위의 방법으로 간편하게 끝날 수 있는 것.


synchronized boolean setProgressInternal(int progress, boolean fromUser, boolean animate) {

    if (mIndeterminate) {
       
// Not applicable.
       
return false;
    }

    progress = MathUtils.constrain(progress,
0, mMax);

   
if (progress == mProgress) {
       
// No change from current.
       
return false;
    }

   
mProgress = progress;
    refreshProgress(R.id.
progress, mProgress, fromUser, animate);
   
return true;
}

- seekbar의 progress값이 현재 Max가 아닌 경우에만 시행한다.

- 앱 유저가 seekbar를 건드리지 않았지만 seekbar를 변경해야 하는 경우에만 Progress 상태를 refresh한다.



  1. setProgress() 함수 [본문으로]
  2. public void setProgress(int progress) { setProgressInternal(progress, false, false); } [본문으로]
  3. public void setProgress(int progress, boolean animate) { setProgressInternal(progress, false, animate); } [본문으로]