seekbar_layout.xml

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

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

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <TextView

        android:id="@+id/seekbar_value"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:gravity="center"/>

    <SeekBar

        android:id="@+id/seekbar1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:max="255" />

</LinearLayout>

====================================


AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

final dialogView = View.inflate(mContext, R.layout.seekbar_layout, null);

final tv = (TextView)  dialogView.findViewById(R.id.seekbar_value);

final sb = (SeekBar) dialogView.findViewById(R.id.seekbar1);

int progressVal = 10;

tv.setText(Integer.toString(progressVal));

sb.setProgress(progressVal);


//dialog가 아닌 경우 textview 초기 위치 설정을 위해 아래 두 방법 중 하나 사용

//resolve 1

final ViewTreeObserver viewTreeObserver = sb.getViewTreeObserver();

if (viewTreeObserver.isAlive()) {

    viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override

        public void onGlobalLayout() {

            sb.getViewTreeObserver().removeGlobalOnLayoutListener(this);

        }

    });

}

//resolve 2

sb.addOnLayoutChangeListener(new View.OnLayoutChangeListener(){

    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {

    }

});

//end resolve


sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

    @Override

    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

        tv.setText(Integer.toString(progress));

        int padding = sb.getPaddingLeft() + sb.getPaddingRight();

        int startPos = sb.getLeft() + sb.getPaddingLeft();

        int moveX = (sb.getWidth()-padding) * sb.getProgress() / sb.getMax() + startPos - (tv.getWidth()/2);

        tv.setX(moveX);

    }

    @Override

    public void onStartTrackingTouch(SeekBar seekBar) {

    }

    @Override

    public void onStopTrackingTouch(SeekBar seekBar) {

    }

});


builder.setView(dialogView);

final Dialog dlg = builder.create();

dlg.setOnShowListener(new OnShowListener(){

    @Override

    public void onShow(DialogInterface arg0) {

        TextView valueView = (TextView)  dlg.findViewById(R.id.seekbar_value);

        SeekBar sbar = (SeekBar) dlg.findViewById(R.id.seekbar1);

        int padding = sbar.getPaddingLeft() + sbar.getPaddingRight();

        int startPos = sbar.getLeft() + sbar.getPaddingLeft();

        int moveX = (sbar.getWidth()-padding) * sbar.getProgress() / sbar.getMax() + startPos - (valueView.getWidth()/2);

        valueView.setX(moveX);

    }

});

dlg.show();



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'programmer > android' 카테고리의 다른 글

usb event broadcastreceiver  (0) 2013.07.03
ringtone/alarm tone 설정  (0) 2013.07.01
seekbar progress 위치에 value 표시  (0) 2013.06.25
android custom actionbar  (0) 2013.06.22
dialog position  (0) 2013.06.20
Using EditText  (0) 2013.06.14
Posted by ocsoosoo

댓글을 달아 주세요


티스토리 툴바