2014-01-13 3 views
0

Iam разрабатывает приложение для камеры по этой ссылке http://developer.android.com/guide/topics/media/camera.html Я следовал за учебником, но как только я установил ориентацию экрана в портретный режим, мой предварительный просмотр камеры автоматически поворачивается на 90 градусов. как это исправить?Камера автоматически поворачивается на 90 градусов в портретном режиме

+0

это происходит только тогда, когда вы устанавливаете ориентацию экрана? –

+0

Если мы не установим поворот экрана, тогда возникнет только эта проблема. –

ответ

2

На поверхности, которая содержит экземпляр камеры, вы должны реализовать несколько методов. один из них - надстрочный. в этом методе вы должны обновить ориентацию следующим образом:

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
       int height) { 

    ... 
    this.setCameraDisplayOrientation(this.cameraId, this.mCamera); 
    ...  
} 

И реализации:

/** 
    * Calling this method makes the camera image show in the same orientation as the display. 
    * NOTE: This method is not allowed to be called during preview. 
    * 
    * @param cameraId 
    * @param camera 
    */ 
    @SuppressLint("NewApi") 
    public void setCameraDisplayOrientation(int cameraId, android.hardware.Camera camera) { 
     int rotation = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay() 
       .getRotation(); 
     int degrees = 0; 
     switch (rotation) { 
      case Surface.ROTATION_0: degrees = 0; break; 
      case Surface.ROTATION_90: degrees = 90; break; 
      case Surface.ROTATION_180: degrees = 180; break; 
      case Surface.ROTATION_270: degrees = 270; break; 
     } 

     int result; 
     if (Utils.hasGingerbread()) { 
      android.hardware.Camera.CameraInfo info = 
        new android.hardware.Camera.CameraInfo(); 
      android.hardware.Camera.getCameraInfo(cameraId, info); 
      if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
       result = (info.orientation + degrees) % 360; 
       result = (360 - result) % 360; // compensate the mirror 
      } else { // back-facing 
       result = (info.orientation - degrees + 360) % 360; 
      } 
     } else { 
      // on API 8 and lower devices 
      if (context.getResources().getConfiguration().orientation !=Configuration.ORIENTATION_LANDSCAPE) { 
       result = 90; 
      } else { 
       result = 0; 
      } 
     } 
     try { 
      camera.setDisplayOrientation(result); 
     } catch (Exception e) { 
      // may fail on old OS versions. ignore it. 
      e.printStackTrace(); 
     } 
    } 
0

Вращение будет зависеть от устройства. У меня уже была эта проблема, и решение, которое я нашел, использовало this method.

Смежные вопросы