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

私は初心者で、ループの仕組みがわかりません。カウンターでできると思ったのですが、うまくいきませんでした。私がしようとしているのは、ボタンを押すまで、ループ内でカメラのフラッシュを毎秒点滅させることです。私を助けてください。ありがとう

4

3 に答える 3

2

その場合、ループが終了するため、 if (counter == 0) は true になることはありません。

于 2012-12-20T19:28:35.420 に答える
1

他の人が言ったように、counter == 0 の場合にのみループに入るということは、counter == 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? */
}

トグル遅延には、いくつかのオプションがあります。

まず、遅延を提供するために wait() をトグル関数に追加するときRunnableのように、Android オプションの 1 つまたは 1 つを介して別のスレッドから toggle() を呼び出すことができます。AsyncTask

2 つ目は、私の個人的なお気に入りです。これは、インテント レシーバーをセットアップsetRepeating()し、PendingIntent.

于 2012-12-20T19:55:41.610 に答える
1

カウンタ == 1 の場合にしか while ブロックに入らないため、コードの次の部分は実行されません。

 if(counter == 0){
            cameraOn();
            counter += 1;

そのため、while ブロックwhile (counter == 1)に入ったことがある場合は、常に cameraOff() メソッドを呼び出すことになります。つまり、if ステートメントが真になることはなく、else ステートメントが常に実行されます。

于 2012-12-20T19:36:42.747 に答える