SeekBar를 사용하여 손전등 깜빡임을 제어해 보겠다.
SeekBar는 SeekBar.setOnSeekBarChangeListener()를 통해 하기의 3개의 이벤트에 대해 noti를 받을 수 있다.
1. onStartTrackingTouch() : 최초 터치하여 드래그 시작할때 발생
2. onProgressChanged() : Progress 수치 변경 시 발생
3. onStopTrackingTouch() : Progress 변경을 멈출때 발생
SeekBar 레이아웃의 값으로는,
1. android:max : SeekBar 최대치일때의 수치 설정
2. android:progress : 변경 단위 설정
2. android:thumb : SeekBar의 드래그 하는 아이콘 설정
SeekBar 예제를 통해 손전등 깜빡임 속도를 제어해 보면,
private SeekBar mSeekBar;
private static FlickerThread flickerThread = null;
// flicker turn on off
mSeekBar = (SeekBar) findViewById(R.id.idSeekBar);
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Log.v(TAG, "Progress is " + progress);
mProgress = progress;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
speed = (17 - mProgress) * 20;
flickerThread = new FlickerThread();
flickerThread.setFlickerRun();
flickerThread.setFlickerSpeed(speed);
flickerThread.start();
}
}
}
});
<SeekBar
android:id="@+id/idSeekBar"
android:layout_width="362dp"
android:layout_height="103dp"
android:layout_marginTop="80dp"
android:max="11"
android:progress="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.489"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
와 같이 Progress 변경을 감지하고 있다가, 마지막 손을 뗄 때 값으로 깜빡임 속도를 조절하도록 하였다.(손을 떼지 않고 드래그하는 동안 Progress 값은 계속 변경되므로 마지막 값 받았을 때 동작)
깜빡임 동작을 수행할 Thread는 하기와 같이 구현해 두었다.
public class FlickerThread extends Thread{
private boolean flickerRun = false;
private int speed = 0;
@Override
public void run() {
while(flickerRun){
try {
MainActivity.turnOn();
Thread.sleep(speed);
MainActivity.turnOff();
Thread.sleep(speed);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void setFlickerRun(){
this.flickerRun = true;
}
public void setFlickerStop(){
this.flickerRun = false;
}
public void setFlickerSpeed(int speed){
Log.v("FL", "Speed is set to " + speed);
this.speed = speed;
}
}
다음 포스트 :
[손전등 어플 만들기 #3] 모스부호 변환하여 깜빡이기 (TreeMap, TextView 예제)
'개발 > Android' 카테고리의 다른 글
[안드로이드] Android에서 타이틀바(TitleBar) 없애기 (0) | 2020.06.26 |
---|---|
[안드로이드] 애드몹(adMob) 내 앱에 광고 달기 #1 - 애드몹계정설정 (0) | 2020.06.26 |
[안드로이드] 구글플레이 개발자 등록하기 (0) | 2020.06.26 |
[손전등 어플 만들기 #3] 모스부호 변환하여 깜빡이기 (TreeMap, TextView 예제) (0) | 2020.06.26 |
[손전등 어플 만들기 #1] 플래시 켜기/끄기 - Flashlight API (0) | 2020.06.21 |