2012-11-06 4 views
3

안드로이드의 ApiDemos 응용 프로그램에서와 마찬가지로 카메라 미리보기를 구현했습니다. 사실 미리보기가 세로로 고정되어있는 것으로 보이는 활동을 원합니다. 그래서 나는 매니페스트에서 세로로 screenOrientation을 설정했습니다.안드로이드 세로 잠긴 카메라 미리보기

'getOptimalPreviewSize'메서드는 미리보기의 반대 값을 반환합니다. 즉, 480x720을 반환해야 할 때 메서드가 720x480을 반환하고 액티비티의 FrameLayout에 중심을 둔 작은 미리보기가 있습니다. . 내가

은 (예, 레이아웃이 "match_parent"로 정의된다) 부모를 일치시킬 I 시도 :

  • setDisplayOrientation (90)
  • parameters.set ("오리엔테이션", " 초상화 ");
  • parameters.set ("rotation", "90");

아무 도움이되지 않습니다.

세로 모드에서 카메라 미리보기를 표시 할 수없는 이유는 무엇입니까? 잠겨있어.

감사

다음
+1

http://stackoverflow.com/questions/10660598/android-camera-preview-orientation-in-portrait-mode. 귀하의 요구 사항과 유사한 링크가 있습니다. 수락 된 답변에 대한 참고 사항을 읽으십시오. – Raghunandan

답변

2

가 작동 서피스 뷰 SurfaceView에 카메라의 초상화 미리보기의 예입니다 : 다음 레이아웃 파일로

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surface); 
    surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { 

     private Camera camera; 

     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 
      try { 
       camera = Camera.open(); 
       camera.setPreviewDisplay(holder); 
       camera.setDisplayOrientation(90); 
       camera.startPreview(); 
      } catch (IOException e) { 
       Log.e(TAG, "Error", e); 
      } 
     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 
      camera.stopPreview(); 
     } 

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

:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <SurfaceView 
     android:id="@+id/surface" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</FrameLayout> 
+0

ContentView를 이와 같이 설정하면 제대로 작동하지만 XML로 설정하려면 어떻게해야합니까? 나는 너비와 높이를 다시 잡을 수 있다고 생각한다./ – user584513

+0

XML 레이아웃 파일에도 적용된다. (내 편집 참조) – fiddler

+0

SurfaceView 대신 작동하는지 검사 할 수있다. 사용자 정의보기를 사용한다.)을 사용하여 SurfaceHolder.Callback을 구현하고 화면 방향을 \t \t setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 감사! – user584513

-1

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

을 시도 그 해당 방향으로 활동을 잠급니다.

Google 문서 도구에서 다음 코드 :

public static void setCameraDisplayOrientation(Activity activity, 
    int cameraId, android.hardware.Camera camera) { 
android.hardware.Camera.CameraInfo info = 
     new android.hardware.Camera.CameraInfo(); 
android.hardware.Camera.getCameraInfo(cameraId, info); 
int rotation = activity.getWindowManager().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 (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; 
} 
camera.setDisplayOrientation(result); 
} 

올바르게 카메라와 미리보기의 방향을 설정합니다.

+0

setRequestedOrientation은 안드로이드 매니페스트의 screenOrientation 설정과 같지 않습니까? 그렇다면 인물로 이미 설정되었습니다. – user584513

+0

제발!이것은 질문에 대한 대답이 아닙니다. – swiftBoy