Android ChangeCameraOnFly

Я хочу иметь возможность переключать камеру сзади вперед (или спереди назад). С этим кодом при запуске приложения работает первый переключатель, но другие этого не делают:

  public void changeCameraOnFly(View v)
  {
       if (isPreview) {camera.stopPreview();}
       camera.release();

           System.out.println("Camera ID before : " + String.valueOf(cameraID));
       if(cameraID == 0) {cameraID++;}
       if(cameraID == 1) {cameraID--;}
       System.out.println("Camera ID after: " + String.valueOf(cameraID));

           camera = Camera.open(cameraID);
           try {
                //this step is critical or preview on new camera will no know where to render to
                camera.setPreviewDisplay(surfaceCamera.getHolder());
           }
           catch (IOException e) { e.printStackTrace(); }
       camera.startPreview();
  }

Журнал отладки:

06-17 18:27:43.594: I/System.out(10551): Camera ID before : 1
06-17 18:27:43.594: I/System.out(10551): Camera ID after: 0
06-17 18:27:46.074: I/System.out(10551): Camera ID before : 0
06-17 18:27:46.074: I/System.out(10551): Camera ID after: 0

1 ответ

Решение

Когда cameraId 0, ваше первое утверждение if верно. таким образом cameraId увеличивается до 1.

Затем ваше приложение переходит к следующей строке, где вы проверяете, cameraId 1. Действительно, так cameraId уменьшается до 0.

Попробуйте вместо этого использовать if-else. Например:

if (cameraId == 0) {
    cameraId++;
} else if (cameraId == 1) {
    cameraId--;
} else {
    // Default: Do nothing
}
Другие вопросы по тегам