2012-11-21 2 views
11

카메라 앱을 만들었으므로 앱을 4 가지 방향으로 돌리고 그에 따라 카메라 미리보기를 업데이트해야합니다. 나는 마침내 올바른 방향과 모든 작품을 얻기 위해 삼성 갤럭시 TAB2에 그들을 테스트 값을 tweeked 한 Android - Camera preview is sidewaysAndroid : 카메라 미리보기의 화면 방향/회전

public void updateCameraDisplay(int w, int h) { 
     // set preview size and make any resize, rotate or 
     // reformatting changes here 

     Log.i("CameraPreviews", "Updating camera orientation with w=" + w 
       + " and h=" + h); 
     Parameters parameters = camera.getParameters(); 
     Display display = getActivity().getWindowManager() 
       .getDefaultDisplay(); 

     int rotation = getActivity().getResources().getConfiguration().orientation; 
     Log.i("CameraPreviews", "rotation is " + display.getRotation()); 
     if (display.getRotation() == Surface.ROTATION_0) { 

      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(0); 
     } 

     if (display.getRotation() == Surface.ROTATION_90) { 
      parameters.setPreviewSize(w, h); 
      camera.setDisplayOrientation(270); 
     } 

     if (display.getRotation() == Surface.ROTATION_180) { 
      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(180); 
     } 

     if (display.getRotation() == Surface.ROTATION_270) { 
      parameters.setPreviewSize(w, h); 
      camera.setDisplayOrientation(90); 
     } 

     try { 
      camera.setParameters(parameters); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

: 그것을 위해 내가 복사 한 다음과 같은 방법을 사용했다. 내가 htc one의 전화에서 그것을 시도했을 때 전혀 작동하지 않는다 !!!!! 모든 전자 방향은 완전히 잘못되었습니다! 그래서 나는 thre가 화면의 "기본"위치에서 몇도 각도로 회전했는지를 나타 내기 때문에 2 가지 유형의 장치 (또는 그 이상 ... 아니요!)가 있어야한다는 결론에 도달했습니다. 그런 다음 일부 장치는 기본 위치 다른 사람은 다른 사람이다. 이 기본 회전에 대해 알아 내서 코드에 따라 어떻게 조치 할 수 있습니까? EJ : defaultOrientation = 일부 코드 (defaultOrientation == 0) ... 다른 ....

은 화면 방향 잠금 경우는 문제가 부족합니다. 대상 API> = 11 개 감사

편집 많은 :

public void updateCameraDisplay(int w, int h) { 
     // set preview size and make any resize, rotate or 
     // reformatting changes here 

     Log.i("CameraPreviews", "Updating camera orientation with w=" + w 
       + " and h=" + h); 
     Parameters parameters = camera.getParameters(); 
     Display display = getActivity().getWindowManager() 
       .getDefaultDisplay(); 

     int rotation = getActivity().getResources().getConfiguration().orientation; 
     Log.i("CameraPreviews", "screen rotation is " + rotation); 
     Log.i("CameraPreviews", "display rotation is " + display.getRotation()); 
     if (display.getRotation() == Surface.ROTATION_0) { 

      if (rotation == Configuration.ORIENTATION_LANDSCAPE) { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(0); 
      } else { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(90); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_90) { 
      if (rotation == Configuration.ORIENTATION_PORTRAIT) { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(270); 
      } else { 
       parameters.setPreviewSize(w, h); 
       //camera.setDisplayOrientation(0); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_180) { 
      if (rotation == Configuration.ORIENTATION_LANDSCAPE) { 
      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(180); 
      }else { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(270); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_270) { 
      if (rotation == Configuration.ORIENTATION_PORTRAIT) { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(90); 
      } else { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(180); 
      } 
     } 

     try { 
      camera.setParameters(parameters); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

만큼 우리가 회전하지 않는 HTC 하나 S와 삼성 갤럭시 탭에서 더 잘 작동 : 내가 내 코드를 수정 한 전화가 인물 모드에서 거꾸로되어있는 경우

+1

올바른 구현을 위해 장치 높이/너비를 계산해야한다고 생각합니다. 각도와 장치의 현재 높이/너비 조합을 사용하면 정확한보기 위치를 파악할 수 있습니다. – dreamcoder

+0

ExifInterface를 사용하여 방향을 얻습니다. 나를 위해 잘 작동하지만 어떤 HTC 장치에서 내 코드를 테스트하지 않았습니다. – Biplab

+0

두 가지 유형의 장치 : http://stackoverflow.com/a/35431231/192373 –

답변

0

카메라의 뒷면 방향을 기준으로 카메라의 각도, 화면의 방향, 카메라를 사용하는 경우, 방향 변경을 감지합니다.

중요한 것은 카메라 제조사에서 구현 한 HAL 코드가 Google의 프로토콜을 준수하는지 여부입니다.

관련 문제