<실행화면>
첫 화면은 기본값 50에서 시작. 시크바를 드래그하면 프로그레스바와 텍스트뷰가 같이 바뀐다.
1. 배치하기
SeekBar, ProgressBar, TextView를 배치한다.
시크바와 프로그레스바의 max 값, progress 값을 설정해준다. (max=100, progress=50으로 설정함)
텍스트뷰는 테두리를 넣고 싶어서 drawable에 셰이프 드로어블 파일을 만든 뒤 background로 적용시켰다.
2. MainActivity.java 작성하기
<MainActivity.java>
package com.example.doitmission_06;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 프로그레스바
ProgressBar progressBar = findViewById(R.id.progressBar);
progressBar.setIndeterminate(false);
progressBar.setProgress(50);
// 텍스트뷰
TextView textView = findViewById(R.id.textView);
// 시크바
SeekBar seekBar = findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
textView.setText(""+seekBar.getProgress());
progressBar.setProgress(seekBar.getProgress());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
textView.setText(""+seekBar.getProgress());
progressBar.setProgress(seekBar.getProgress());
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
textView.setText(""+seekBar.getProgress());
progressBar.setProgress(seekBar.getProgress());
}
});
}
}
아래 코드를 입력하면 자동으로 onProgressChanged(), onStartTrackingTouch(), onStopTrackingTouch()가 재정의된다.
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){}
onProgressChanged() : 드래그 중에
onStartTrackingTouch() : 최초로 탭할 때
onStopTrackingTouch() : 드래그를 멈추고 탭을 땔 때
위의 세가지 상황 모두 동일한 코드를 입력해주었다.
textView.setText(""+seekBar.getProgress());
progressBar.setProgress(seekBar.getProgress());
<문제 상황>
앱이 강제종료. 이번에 발생한 에러 메시지는 android.content.res.Resources$NotFoundException
setText에 String형이 들어가야하는데 int형을 넣었을 때 이러한 에러가 발생한다고 한다.
처음에 아래와 같이 입력해서 에러가 발생했던 것.
textView.setText(seekBar.getProgress());
아래와 같이 ""+로 String형으로 만들어주었더니 해결됨.
textView.setText(""+seekBar.getProgress());
근데 ""+ 쓰는 거 말고도.. toString() 쓰면 될 줄 알았는데 안됨. String.valueOf()을 쓰면 되는듯?
실행이 잘 되었음. 휴
드디어 3장 끝~
'TIL > 안드로이드 스튜디오' 카테고리의 다른 글
4장 인텐트 (0) | 2024.12.03 |
---|---|
4장 화면전환 (0) | 2024.12.01 |
도전!5 - 두 종류의 버튼 모양 만들기 (0) | 2024.11.29 |
3장 프로그레스바 (진행상태 표시) (0) | 2024.11.28 |
3장 알림 대화상자 보여주기 (AlertDialog) (0) | 2024.11.28 |