0

このボタンを押すと:

case R.id.btlento:
    Timer timers = new Timer();
    timers.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        cameraOn();
    },deloy1,poriod1);
        Timer timers2 = new Timer();
        timers2.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            cameraOff();
        }
    },deloy,poriod);

メソッド cameraOn と cameraOff は次のとおりです。

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

変数は次のとおりです。

int deloy = 2000;
int poriod = 2000;
int deloy1 = 1000;
int poriod1 = 2000;

これはすべて、カメラのフラッシュを点滅させるためのものですが、停止することはないため、ループをどのように中断するかはわかりません。

どうすればループを止めることができますか?

4

3 に答える 3

0

フラグを使用し、

// member variables

private boolean cameraIsFlashing = false;
private Timer onTimer;
private Timer offTimer;

// constructor & other stuff

// button click method
case R.id.btlento:
     toggleCameraFlash();
   break;

private void toggleCameraFlash(){
    if(cameraIsFlashing){
        stopFlashing();
    } else {
        startFlashing();
    }
}

private void startFlashing(){
  cameraIsFlashing = true;
  // Start your timers
  onTimer = new Timer();
  onTimer.scheduleAtFixedRate(new TimerTask() {

  @Override
  public void run() {
      cameraOn();
  },deloy1,poriod1);
}

private void stopFlashing(){
  cameraIsFlashing = false;
  // Cancel / Stop your timers
  onTimer.cancel;
}
于 2012-12-28T12:25:06.450 に答える
0

匿名クラスを使用する代わりに、タイマー タスクの変数を作成します。最初にタイマー タスクをキャンセルしてから、タイマーをキャンセルします。

于 2012-12-28T12:35:25.210 に答える
0

スレッドタイマーで cancel() と purge() を呼び出して、スレッドを停止します。
以下に示すように。

private void cameraOff() {
// TODO Auto-generated method stub
if(timer != null){
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;

timer.cancel();// cancel and releases
timer.purge();
}
} 
于 2012-12-28T12:31:15.710 に答える