cameraOn();
while (counter == 1){
if(counter == 0){
cameraOn();
counter += 1;
}else{
cameraOff();
counter -= 1;
}
}
方法是:
private void cameraOff() {
// TODO Auto-generated method stub
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;
}
private void cameraOn() {
// TODO Auto-generated method stub
camera = Camera.open();
parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
}
我有一个按钮,必须打破循环并完成活动:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (camera == null){
finish();
}else{
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;
finish();
}
我是初学者,我不明白循环是如何工作的,我和计数器一起努力,但是它没有用。 我正在尝试的是让相机在循环中每秒闪烁一次,直到我按下按钮。请帮我。感谢
答案 0 :(得分:2)
if(counter == 0)永远不会为真,因为在这种情况下你的循环会退出。
答案 1 :(得分:1)
您的代码的以下部分将永远不会被执行,因为如果counter == 1,则只输入while块。
if(counter == 0){
cameraOn();
counter += 1;
因此,如果您输入了while while (counter == 1)
,则总是会调用cameraOff()方法。换句话说,if语句永远不会成立,而else语句将是始终执行的语句。
答案 2 :(得分:1)
正如其他人所说,只有当counter == 0时才进入循环意味着它永远不会进入需要计数器== 1的内循环,并且永远不会进入cameraOn()。
试试这个:
清除你的onClick方法并将其替换为:
@Override public void onClick(View v) {
cameraOff();
/* or 'toggle();' if you prefer, see below */
}
(因为它似乎做了完全相同的事情。)
注释/删除整个嵌套循环,并确保在某处调用cameraOn()或toggle()以启动。
要设置切换,您可以添加static Boolean isFlashActive;
(或以其他方式检测闪光状态,我还没有使用过该API)
..并添加一个功能:
private toggle(){
if ( isFlashActive ) {
cameraOff();
} else {
cameraOn();
}
/* delay? */
}
对于切换延迟,您有几个选项:
首先,您可以通过Runnable
或其中一个android选项(如AsyncTask
)从另一个线程调用toggle(),同时在切换功能中添加wait()以提供延迟;
其次是我个人最喜欢的,即设置一个意图接收器,然后使用setRepeating()
和PendingIntent
。