상세 컨텐츠

본문 제목

[Android]시크바 (SeekBar)

Android 개발

by mobile 2012. 8. 26. 19:06

본문

반응형

▶ 시크바(SeekBar)

시크바는 프로그레스바를 확장하여 만들어진 것인데, 프로그레스바의 속성을 가지고 있으면서도 사용자가 값을 조정할 수 있도록 해줍니다. 프로그레스바의 속성을 가지고 있으면서도 사용자가 값을 조정할 수 있도록 해줍니다. 즉, 시크바의 일부분을 터치하면 터치한 부분으로 즉시 이동할 수 있는 방법을 제공하며 가운데 부분에 있는 표시를 드래그하여 좌우로 이동 시킬 수도 있습니다. 이 위젯은 볼륨 조절이나 동영상 재생 시 재생 위치 조절을 위해 사용됩니다. 이 위젯은 프로그레스바로부터 상속한 것이므로 그 속성을 그대로 사용할 수 있으며 추가적으로 OnSeekBarChangeListener라는 리스너를 설정하여 사용할 수 있습니다. 이 리스너의 메소드들은 시크바의 상태가 바뀔 때마다 호출되며 다음과 같은 메소드들이 정의 되어 있습니다.

[Code]

void onStrartTrackingTouch(SeekBar seekBar)

void onStopTrackingTouch(SeekBar seekBar)

void onProgressChanged(SeekBar seekBar, int progress, boolean formUser)


onProgressChanged()메소드의 formUser 파라미터는 사용자의 입력인지 아니면 코드에서 변경한 것인지 구분할 수 있도록 합니다.


▷ /res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical" 

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    <Button 

    android:id="@+id/showBtn"

        android:layout_width="wrap_content" 

        android:layout_height="wrap_content"

        android:text="화면 밝기 조절" 

        />

    <LinearLayout 

    android:id="@+id/panel01" 

    android:orientation="vertical"

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content"

        android:padding="10dp"

        android:gravity="center_horizontal"

        android:visibility="gone"

        >

        <SeekBar 

           android:id="@+id/seekbar01" 

           android:layout_width="fill_parent"

            android:layout_height="wrap_content" 

            android:progress="100"

            android:max="100" 

            />

        <TextView 

        android:id="@+id/text01" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content"

            android:gravity="center" 

            android:textSize="20dp"

            android:text="밝기 수준 : " 

            />

    </LinearLayout>

</LinearLayout>


▷ SampleSeekBarActivity.java

package com.example.sampleseekbar;


import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.view.WindowManager;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.Button;

import android.widget.SeekBar;

import android.widget.SeekBar.OnSeekBarChangeListener;

import android.widget.TextView;


public class SampleSeekBarActivity extends Activity {


private View panel;

private SeekBar seekbar;

private TextView text01;

private int brightness = 50;


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);


panel = findViewById(R.id.panel01);

text01 = (TextView) findViewById(R.id.text01);

seekbar = (SeekBar) findViewById(R.id.seekbar01);


Button showBtn = (Button) findViewById(R.id.showBtn);

showBtn.setOnClickListener(new View.OnClickListener() {


public void onClick(View v) {

// TODO Auto-generated method stub

showPanel();

}

});


seekbar.setOnSeekBarChangeListener(new MyOnSeekBarChangeListener());

}


private void showPanel() {

Animation animation = AnimationUtils.loadAnimation(this,

R.anim.translate_left);

seekbar.setProgress(this.brightness);

panel.setVisibility(View.VISIBLE);

panel.startAnimation(animation);

}


private void setBrightness(int value) {

if (value < 10) {

value = 10;

} else if (value > 100) {

value = 100;

}


brightness = value;

WindowManager.LayoutParams params = getWindow().getAttributes();

params.screenBrightness = (float) value / 100;

getWindow().setAttributes(params);

}


private void hidePanel() {

Animation animation = AnimationUtils.loadAnimation(this,

R.anim.translate_right);

panel.startAnimation(animation);

panel.setVisibility(View.GONE);


}


class MyOnSeekBarChangeListener implements OnSeekBarChangeListener {

public void onProgressChanged(SeekBar seekBar, int progress,

boolean fromUser) {

setBrightness(progress);

text01.setText("밝기 수준 : " + progress);

}


public void onStartTrackingTouch(SeekBar seekBar) {

}


public void onStopTrackingTouch(SeekBar seekBar) {

hidePanel();

}

}

}


▷ 예제 소스

SampleSeekBar.zip


반응형

관련글 더보기

댓글 영역