728x90
반응형

Seekbar

안드로이드 스튜디오에는 슬라이더에 대응되는 seekbar가 있다

 

적당한 위치에 Seekbar을 추가하고 id를 frame_speed라고 했다

#activity_main.xml
...
    <SeekBar
        android:id="@+id/frame_speed"
        android:layout_width="208dp"
        android:layout_height="21dp"
        android:max="120"
        android:min="1"
        android:progress="30"
        android:layout_marginStart="101dp"
        android:layout_marginLeft="101dp"
        android:layout_marginTop="297dp"
        android:layout_marginEnd="102dp"
        android:layout_marginRight="102dp"
        android:layout_marginBottom="22dp"
        app:layout_constraintBottom_toTopOf="@+id/button_widget"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 ...

 

그 다음 MainActivity.java에서 관련 코드 추가

		Seekbar frame_bar = (SeekBar) findViewById(R.id.frame_speed);
        frame_bar.incrementProgressBy(1);

        frame_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Log.e("value:", String.valueOf(progress));
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

incrementProgressBy는 seekbar의 step를 설정해준다

 

먼저 Log.e를 통해 value를 확인

이제 이걸 FloatingWidget의 duration으로 넘겨주면 된다

 

Intent.putExtra(name, value)

putExtra함수는 변수를 다른 Activity나 Service로 넘겨주는 함수이다

value의 자료형에 따라 intent.getIntExtra나 intetn.getStringExtra등으로 받을 수 있다

 

MainActivity의 setOnClickListener부분에 intent.putExtra함수 추가

addButtonWidget.setOnClickListener(new View.OnClickListener() { //Button Click Event
            @Override
            public void onClick(View view) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //if current version is higher than Marshmallow (6.0)
                    if(!Settings.canDrawOverlays(MainActivity.this)) //if no overlay permission
                    {
                        getPermission(); //try to get overlay permission
                    }
                    else //if overlay permission
                    {
                        Intent intent = new Intent(MainActivity.this, WidgetService.class); //create intent of WidgetService
                        intent.putExtra("speed", frameSpeed); //frame Speed transmit
                        startService(intent); //start Widget
                        finish(); //end MainActivity
                    }
                }
            }
        });

 

WidgetService에서 getIntExtra를 통해 duration값을 정한다

        duration = 1000/(intent.getIntExtra("speed", -1));

첫번째 인자로 putExtra에서 썻던 name을 넣는다

 

마지막으로 Seekbar 위에 TextView를 추가해서 숫자를 보여주자

...
TextView frame_text = (TextView) findViewById(R.id.frame_speed_text);
...
frame_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Log.e("value:", String.valueOf(progress));
                frame_text.setText("FrameSpeed: " + progress);
                frameSpeed = progress;
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

 

Widget을 추가한 후에는 속도를 조절할 수는 없지만 처음 시작할 때 속도조절이 가능해졌다