我在带有频镜的手电筒应用程序上工作,此时该应用程序正在使用,闪光灯正在使用按钮,并且频率在借助频率seekbar。
问题是,如果闪光灯打开并且我向右拖动,以开始并增加频率效应的效率,但是如果我关闭闪光灯并在某个点上拖动Seekbar,那么并打开闪光灯的频率效果,但仍将在其上进行操作,只是不会更新并增加频率,我必须关闭并再次手电筒以更改自由度或停止频闪效应(当然,当闪光灯不在移动seekbar(。
您可以帮助我,让我理解为什么它不会随着闪光灯而更新,plesase!我会很感激 !谢谢!
这是代码:
seekbar
SeekBar sbar = (SeekBar) findViewById(R.id.seekBar2);
sbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
freq = progress;
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
Stroborunner
private class StroboRunner implements Runnable{
int freq;
boolean stopRunning = false;
volatile int delay = 100;
volatile int delayoff = 200;
@Override
public void run() {
Camera.Parameters paramsOn = camera.getParameters();
Camera.Parameters paramsOff = parameter;
paramsOn.setFlashMode(Parameters.FLASH_MODE_TORCH);
paramsOff.setFlashMode(Parameters.FLASH_MODE_OFF);
try{
while(!stopRunning) {
MainActivity.this.camera.setParameters(paramsOn);
MainActivity.this.camera.startPreview();
Thread.sleep(delay - freq);
// We make the thread sleeping
MainActivity.this.camera.setParameters(paramsOff);
MainActivity.this.camera.startPreview();
Thread.sleep(delayoff-freq);
}
} catch (Exception e){
}
}
}
也用于手电筒的打开和关闭
private boolean turnOnOff(boolean on) {
if (on) {
if (freq != 0) {
SunetON();
isFlashLightOn = true;
sr = new StroboRunner();
sr.freq = freq;
t = new Thread(sr);
t.start();
return on;
}
else
parameter.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
SunetON();
}
if (!on) {
if (t != null) {
SunetOff();
sr.stopRunning = true;
isFlashLightOff = true;
t = null;
return on;
}
else
parameter.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
SunetOff();
}
camera.setParameters(parameter);
camera.startPreview();
return on;
}
onclicklistener
flashLight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isChecked = !isChecked;
if (isChecked)
flashLight.setImageResource(R.drawable.on);
else
flashLight.setImageResource(R.drawable.off);
turnOnOff(isChecked);
}
});
编辑:没事,如果/其他格式化 - Turnonoff已经在外面
一个很好的起点是将Turnonoff(休次(移到您的其他语句之外。
flashLight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isChecked = !isChecked;
if (isChecked)
flashLight.setImageResource(R.drawable.on);
else
flashLight.setImageResource(R.drawable.off);
}
turnOnOff(isChecked);
});