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을 추가한 후에는 속도를 조절할 수는 없지만 처음 시작할 때 속도조절이 가능해졌다
'프로젝트 > 헬테이커 스티커 M' 카테고리의 다른 글
헬테이커 스티커 M#5 - bgm 재생 (0) | 2021.06.18 |
---|---|
헬테이커 스티커 M#4 - 캐릭터 선택 (0) | 2021.06.11 |
헬테이커 스티커 M#2 - 애니메이션 (0) | 2021.05.21 |
헬테이커 스티커 M#1 - Floating Widget 다시 만들기 (1) | 2021.05.14 |
헬티이커 스티커 M#0 - code review (0) | 2021.05.07 |