2012-12-20 128 views
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(); 
    } 

我一個初學者,我不明白循環是如何工作的,我與櫃檯我可以做到,但沒有奏效。 我正在嘗試的是讓相機閃爍每秒一次,直到我按下按鈕。請幫幫我。謝謝

+3

你想循環做什麼? – Sam

+0

對於初學者來說,if語句的第一部分永遠不會被執行,因爲在迭代開始時counter不可能等於0。 – Joel

+0

計數器和相機在哪裏啓動? –

回答

1

正如其他人所說,只有當計數器== 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或其他安卓選項(如AsyncTask)從另一個線程調用toggle(),同時在toggle功能中添加wait()以提供延遲;

其次是我個人的最愛,這是設置一個意圖接收器,然後使用setRepeating()PendingIntent

+0

但是我需要做一個循環,不僅在按下按鈕的時候開啓/關閉。我需要閃光燈將閃爍 – user1918363

+0

編輯..出於某種原因,我看到您的示例中的「閃光燈」,並認爲這是一種自定義的方法,而不是相機閃光燈哈哈。將看看api併發布一些代碼給你。 – CodeShane

2

if(counter == 0)永遠不會是真的,因爲你的循環會在這種情況下退出。

1

代碼以下的部分將永遠不會被執行,因爲你只能進入,而塊如果計數器== 1

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

所以,如果你輸入的,而塊while (counter == 1),你總是會最終調用cameraOff()方法。換句話說,你的if語句永遠不會是真的,else語句將是總是被執行的語句。

+0

,並且如果我將更多的數字放到每一個都是正確的? – user1918363