Java 带频闪的手电筒:频闪不’;不要关掉
我正在尝试创建一个带有频闪效果的手电筒应用程序。我的目标是用Btn开关打开/关闭手电筒,用seekbar增加频闪频率。如果seekbar值为0且开关Btn打开,则手电筒应打开(无任何闪光灯)。但现在,如果seekbar值为0,它仍在闪烁(选通效应开启)。你知道我怎样才能改变吗? 以下是一些我认为很重要的代码(我真的找不到保持stobe效果不变的部分:Java 带频闪的手电筒:频闪不’;不要关掉,java,android,button,flashlight,Java,Android,Button,Flashlight,我正在尝试创建一个带有频闪效果的手电筒应用程序。我的目标是用Btn开关打开/关闭手电筒,用seekbar增加频闪频率。如果seekbar值为0且开关Btn打开,则手电筒应打开(无任何闪光灯)。但现在,如果seekbar值为0,它仍在闪烁(选通效应开启)。你知道我怎样才能改变吗? 以下是一些我认为很重要的代码(我真的找不到保持stobe效果不变的部分: @Override protected void onCreate(Bundle savedInstanceState) { super.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mySwitch = (Switch) findViewById(R.id.mySwitch);
//listener to check changes in state
mySwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
turnOnOff(isChecked);
}
});
skBar = (SeekBar) findViewById(R.id.seekBar);
skBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
freq = progress;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
@Override
protected void onResume() {
super.onResume();
try {
cam = Camera.open();
camParams = cam.getParameters();
cam.startPreview();
hasCam = true;
}catch(Exception e){
}
}
private void turnOnOff(boolean on){
if(on) {
if(freq != 0){
sr = new StroboRunner();
t = new Thread(sr);
t.start();
return;
}else{
camParams.setFlashMode(Parameters.FLASH_MODE_TORCH);
}
}else if(!on){
if(t != null){
sr.stopRunning = true;
t =null;
return;
}else{
camParams.setFlashMode(Parameters.FLASH_MODE_OFF);
}
}
cam.setParameters(camParams);
cam.startPreview();
}
private class StroboRunner implements Runnable {
boolean stopRunning = false;
@Override
public void run() {
Camera.Parameters paramsOn = cam.getParameters();
Camera.Parameters paramsOff = camParams;
paramsOn.setFlashMode(Parameters.FLASH_MODE_TORCH);
paramsOff.setFlashMode(Parameters.FLASH_MODE_OFF);
try {
while (!stopRunning) {
cam.setParameters(paramsOn);
cam.startPreview();
Thread.sleep(100 - freq);
cam.setParameters(paramsOff);
cam.startPreview();
Thread.sleep(100 - freq);
}
}catch(Exception e){
}
}
}
}
我要说的是,这可能是个坏主意。我可以看出这缩短了LED的寿命。@Carcigenicate为什么不好?谷歌Playstore上有很多带有频闪效应的手电筒应用程序。请仔细检查你的
sr.stopRunning=true
是否正常工作