본문 바로가기

안드로이드 - SeekBar 시크바 (이벤트)

SeekBar, 시크바

   - 볼륨 조절, 동영상 재생에 대표적 사용

   - ProgressBar '프로그래스바' 확장 View.

   - ProgressBar 속성 상속. 

 

이벤트 처리, OnSeekBarChangeListener '상태 변경시 자동 호출, CallBack'

            onStartTrackingTouch(SeekBar seekbar) : 최초 탭하여 드래그 시작시 발생

            onStopTrackingTouch(SeekBar seekbar) : 드래그 중 발생

            onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) : 드래그 멈추면 발생

                -> 시크바 View / 변경된 값 / 사용자에 의한 변경인지(True), 코드에 의한 변경인지(False) 

// OnSeekBarChange 리스너 - Seekbar 값 변경시 이벤트처리 Listener
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
	@Override
	public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
		// onProgressChange - Seekbar 값 변경될때마다 호출
		Log.d(TAG, String.format("onProgressChanged 값 변경 중 : progress [%d] fromUser [%b]", progress, fromUser));
		seekbar_value.setText(String.valueOf(seekBar.getProgress()));
	}
	@Override
	public void onStartTrackingTouch(SeekBar seekBar) {
		// onStartTeackingTouch - SeekBar 값 변경위해 첫 눌림에 호출
		Log.d(TAG, String.format("onStartTrackingTouch 값 변경 시작 : progress [%d]", seekBar.getProgress()));
	}
	@Override
	public void onStopTrackingTouch(SeekBar seekBar) {
		// onStopTrackingTouch - SeekBar 값 변경 끝나고 드래그 떼면 호출
		Log.d(TAG, String.format("onStopTrackingTouch 값 변경 종료: progress [%d]", seekBar.getProgress()));
	}
});

 

SeekBar Handle 사용자 드래그 조작, CallBack 순서

 onStartTrackingTouch -> onProgressChange -> onStopTrackingTouch

Code 조작

  - SeekBar.setProgress(int progress) : 지정 progress 값으로 설정

  - SeekBar.incrementProgressBy(int difference) : 현재 progress값 기준으로 더하기 / 빼기 설정

 @Override
public void onClick(View view) {
	// EditText 입력한 값 가져오기
	int value = Integer.parseInt(seekbar_input.getText().toString());
	switch (view.getId()) {
		case R.id.seekbar_progress:
			// 입력 값 검사, 양수(0이상) && (Max)최대범위 이내
			if (value >= 0 && value <= seekBar.getMax()){
				seekBar.setProgress(value);
			} else {
				Toast.makeText(this, "입력 범위 오류", Toast.LENGTH_SHORT).show();
			}
			break;
		case R.id.seekbar_increment:
			//현재 Progress 값 기준으로 더하기 빼기.
			seekBar.incrementProgressBy(value);
			break;
	}
}

Code 조작, setProgress(int progress) / incrementProgressBy(int diff)

  - boolean fromUser, 사용자의 Handle 조작에 의한 변경인지 'Handle 미조작으로 False 반환'  

   - onProgressChanged 콜백만 발생 (onStartTrackingTouch / onStopTrackingTouch 발생 x)