Android - 시크바

유의선·2023년 7월 18일
0

시크바는 프로그레스바를 확장하여 만든 것으로, 프로그레스바의 속성을 갖고 있으면서 사용자가 값을 조정할 수 있게 한다.

시크바는 일부분을 터치하면 터치한 부분으로 즉시 이동할 수 있는 방법을 제공하며, 가운데 있는 핸들(Handle)을 드래그하여 좌우로 이동시킬 수도 있다.

시크바는 프로그래스바를 상속한 것이므로 프로그래스바의 속성을 그대로 사용할 수 있다.

그리고 추가적으로 onSeekBarChangeListener 리스너를 설정하여 이벤트를 처리할 수 있다.
이 리스너의 메소드들은 시크바의 상태가 바뀔 때마다 호출되며 다음과 같은 메소드들이 정의되어 있다.

void onStartTrackingTouch(SeekBar seekBar)
void onStopTrakingTouch(SeekBar seekBar)
void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)

fromUser 파라미터를 사용하면 변경된 값이 사용자가 입력한 것인지 아니면 코드에서 변경된 것인지를 구분할 수 있다.


시크바로 화면밝기 조절하기

activity_main.xml 파일을 수정했다.
SeekBar 하나와 텍스트뷰를 하나 화면에 추가했다.

SeekBar의 max값은 100으로 설정하였다.

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100" />

MainActivity.java 파일에 코드를 작성한다.

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);
        SeekBar seekBar = findViewById(R.id.seekBar);

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                setBrightness(progress);
                textView.setText("변경된 값 : " + progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
    }

    private void setBrightness(int value){
        if(value < 10)
            value = 10;
        else if (value > 100)
            value = 100;

        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.screenBrightness = (float) value / 100;
        getWindow().setAttributes(params);
    }
}

참조한 시크바의 값이 바뀔 때마다 리스너를 통해 알려 변경된 값을 TextView로 보여주고 화면 밝기를 조절하도록 하였다.

화면 밝기는 윈도우 매니저로 설정할 수 있다.

        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.screenBrightness = (float) value / 100;
        getWindow().setAttributes(params);

getWindow 메소드를 사용해 참조한 객체의 윈도우 관련 정보를 getAttributes로 확인하거나 setAttributes로 새로 설정할 수 있다.

화면 밝기를 설정하는 속성은 screenBrightness다.

0개의 댓글