制作循环时遇到麻烦

时间:2012-12-20 19:24:23

标签: java android while-loop

    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();
    }

我是初学者,我不明白循环是如何工作的,我和计数器一起努力,但是它没有用。 我正在尝试的是让相机在循​​环中每秒闪烁一次,直到我按下按钮。请帮我。感谢

3 个答案:

答案 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

相关问题