안드로이드(Android) SeekBar 위젯을 이용해 화면 밝기 조정하기

 

개발환경 : window 7 64bit, Eclipse Kepler, Android 4.2.2

 

이번 예제에서는 SeekBar 를 이용하는 방법과 안드로이드 화면의

밝기를 조절하기 위해 어떻게 WindowManager 를 사용하는지

알아본다.

 

안드로이드에 설정된 값들을 가져오기 위해서 getWindow().getAttributes()

함수를 사용한다. 리턴값으로 WindowManager.LayoutParams 를 받게

되는데 파라미터의 객체중에 screenBrightness 값을 조절하면 된다.

적당한 값을 넣고 Window setAttributes 함수를 사용해 화면 밝기를

조절한다.

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

 

화면을 구성하기 위해 Palette 에서 SeekBar 를 오른쪽으로 끌어다 놓는다.

다음은 MainActivity 로 가서 SeekBar 위젯객체의 레퍼런스를 가져온다.

그리고 setOnSeekBarChangeListener() 함수를 통해 리스너를 등록한다.

리스너의 역할은 바를 움직일 때 이벤트를 얻어 화면밝기를 조절하기

위함이다.

mSeekBar = (SeekBar)findViewById(R.id.seekBar1);
mSeekBar.setOnSeekBarChangeListener(new SeekBarChangeListener());

 

여기에서는 OnSeekBarChangeListener 인터페이스를 상속받아서

SeekBarChangeListener 클래스를 만들었다. 그리고 SeekBar 가 움직일 때

마다 일어나는 이벤트 함수 onProgressChanged 를 구현하였다.

// Seekbar 이벤트 리스너 
class SeekBarChangeListener implements OnSeekBarChangeListener{

	public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
		setBrightness(progress);
	}

	public void onStartTrackingTouch(SeekBar arg0) {
		
	}

	public void onStopTrackingTouch(SeekBar arg0) {
		
	}
	
}

 

화면 조절을 위한 핵심 내용인 setBrightness 는 다음과 같다.

private void setBrightness(int value){
	if (value < 10) {
		value = 0;
	}else if (value > 100){
		value = 100;
	}
	
	nBrightness = value;
	
	// 밝기 설정 
	WindowManager.LayoutParams params = getWindow().getAttributes();
	params.screenBrightness = (float)value / 100;
	getWindow().setAttributes(params);
}

1에서 100 까지의 값을 나누었으며 10 이하의 값은 크게 변화가 없으므로

0 으로 셋팅하였다. SeekBar 를 이리저리 움직여 보면 화면밝기가 바뀐다는

것을 알수 있다.

여기에서는 화면밝기를 위해 사용된 위젯이지만 값을 움직임으로 조절하는

다양한 기능에 응용해서 사용할수 있는 좋은 위젯이다. 값을 숫자로 입력하는 것

보다 이렇게 움직임으로 조절할수 있으므로 아주 편리한 기능이다.

Posted by 녹두장군