[Android] - ProgressBar, SeekBar, RatingBar 다루기

명준쓰·2023년 7월 24일
0

안녕하세요 오늘은 프로젝트를 진행하면서 사용한 SeekBar를 포스팅 하는 겸 SeekBar와 비슷한 진행 상태를 표시하는 뷰들에 대해 함께 포스팅 해보겠습니다.

1.ProgressBar

ProgressBar는 사용자에게 어떤 작업이 진행 중임을 알려주는데 사용되는 뷰입니다. 진행 상태를 bar 또는 원 형태로 제공해줍니다. bar형태는 어느 정도 진행되었는지를 확인할 수 있고 원 형태는 현재 진행중이라는 상태만 보여줍니다.
ex) 파일 업로드, 다운로드 등

1.1 ProgressBar 종류

1.Determinate ProgressBar : 작업의 시작과 끝이 명확하고, 진행 상태를 백분율로 표현할 수 잇을 때 사용합니다.
2.Indeterminate ProgressBar : 작업의 총 진행 시간이나 완료 시점을 알 수 없을 때 사용합니다. 이 경우 ProgressBar는 끊임없이 애니메이션을 통해 작업이 진행 중임을 표시합니다.

1.2 ProgressBar 사용하기

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:max="100" //범위를 지정
    android:progress="20" //시작 지점을 지정
/>

1.3 ProgressBar와 스레드/비동기 태스크 함께 사용하기

일반적으로 Progress는 백그라운드 스레드나 비동기 태스크와 함께 사용됩니다. 예를 들어,
파일을 다운로드 하는동안 ProgressBar를 사용하여 현재 진행 상태를 표시할 수 있습니다.

new AsyncTask<Void, Integer, Void>() {
    @Override
    protected Void doInBackground(Void... voids) {
        for (int i = 0; i < 100; i++) {
            try {
                Thread.sleep(100);  // 0.1초 대기
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            publishProgress(i);  // 진행 상태 업데이트
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        progressBar.setProgress(values[0]);  // ProgressBar 업데이트
    }
}.execute();

2. SeekBar

SeekBar는 사용자가 드래그하는 슬라이더를 통해 값을 선택할 수 있는 UI 요소 입니다.
주로 음량 조절이나 밝기 조절 등에 자주 사용됩니다.

2.1 SeekBar 사용하기

<SeekBar
                        android:id="@+id/location_seekbar"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:thumb="@drawable/custom_seekbar_thumb"
                        android:progressDrawable="@drawable/custom_seekbar_progress"
                        android:layout_weight="1" />
                    <!--thumb : seekbar 진행 아이콘 -->
                    <!--progressDrawable : seekbar 진행 아이콘 -->

위의 코드 중 thumb와 progressDrawable은 원하는대로 커스텀을 하기 위해서 사용합니다.

2.2 SeekBar 이벤트 처리하기

SeekBar의 값이 변경될 때 마다 액션을 수행하려면 'setOnSeekBarChangeListener' 메서드를 사용하여 리스너를 설정합니다.

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        // SeekBar의 진행 상태가 변경되었을 때 호출됩니다.
        // `progress`는 현재 진행 상태이며, `fromUser`는 사용자에 의한 변경인지를 나타냅니다.
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // 사용자가 SeekBar를 터치하여 드래그를 시작할 때 호출됩니다.
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // 사용자가 SeekBar의 드래그를 끝냈을 때 호출됩니다.
    }
});

3. RatingBar

RatingBar는 별점을 받는 등의 평점을 받기 위한 UI 요소입니다.

3.1 RatingBar 사용하기

<RatingBar
    android:id="@+id/ratingBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:rating="3"
    android:stepSize="0.5"/>

3.2 RatingBar 속성 설정하기

RatingBar의 동작 방식과 모양을 정의하는 데 사용되는 주요 속성들은 다음과 같습니다:

android:numStars: RatingBar에 표시될 최대 별 개수를 설정합니다.
android:rating: 현재 RatingBar의 평점을 설정합니다.
android:stepSize: RatingBar의 최소 단위를 설정합니다. 예를 들어, 0.5로 설정하면 반 별씩 평점을 줄 수 있습니다.

3.3 RatingBar 이벤트 처리하기

RatingBar의 평점이 변경될 때마다 액션을 수행하려면 'setOnRatingBarChangeListener' 메서드를 사용하여 리스너를 설정합니다.

ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
    @Override
    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
        // RatingBar의 평점이 변경되었을 때 호출됩니다.
        // `rating`은 현재 평점이며, `fromUser`는 사용자에 의한 변경인지를 나타냅니다.
    }
});

항상 자주 보던 UI 들이지만 막상 구현하려니 SeekBar의 이름을 몰라서 고생했습니다...
UI 공부도 열심히 해야할 필요성을 느끼며 포스팅 마무리하겠습니다.

profile
개린이

0개의 댓글