2011-12-12 4 views
1

API 데모 에서처럼 내 뷰에서 카메라를 구현했습니다. 그러나 가로 모드에서만 작동합니다. 그러나 그것은 나에게 좋지 않습니다. 왜냐하면 대부분 세로 모드에서 사용하기를 원하기 때문입니다. 그래서 버튼 등은 매우 나 빠져 보입니다. CameraPreview를 보여주고 모두 함께 protrait 모드로 작동하는 SurfaceView를 어떻게 얻을 수 있습니까?버튼과 텍스트가있는 뷰의 Android 카메라

방금 ​​API 형식의 데모를 사용했기 때문에 코드를 게시 할 필요가 없다고 생각합니다.

대단히 감사합니다!

답변

3

AndroidManifest.xml 파일에 화면 방향을 지정하지 않으면 기본 표시 방향은 가로 위치이며 휴대 전화를 회전 할 때마다 Android 이미지가 가져온 이미지를 변경하여 이미지를 휴대 전화와 나란히 유지합니다. 따라서 두 가지 옵션이 있습니다.

1.1. 의 AndroidManifest.xml 파일의 화면 방향을 지정하고 적절하게 화면 방향을 설정합니다

의 AndroidManifest.xml :

 <activity 
     android:label="@string/app_name" 
     android:name=".CameraPreview" 
     android:screenOrientation="portrait" > 

CameraPreview.java :

 mCamera.setPreviewDisplay(holder); 
     mCamera.setDisplayOrientation(90); 

또는

의 AndroidManifest.xml을 :

 <activity 
     android:label="@string/app_name" 
     android:name=".CameraPreview" 
     android:screenOrientation="landscape" > 

CameraPreview.java :

 mCamera.setPreviewDisplay(holder); 
     mCamera.setDisplayOrientation(0); 

1.2. 의 AndroidManifest.xml 파일의 화면 방향을 지정하고 적절하게 화면 방향이에게 화면이 회전 할 때마다 설정하지 마십시오 :

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

     int rotation = ((Activity)mCtx).getWindowManager().getDefaultDisplay().getRotation(); 
     int degrees = 0; 
     switch (rotation) { 
     case Surface.ROTATION_0: degrees = 90; break; 
     case Surface.ROTATION_90: degrees = 0; break; 
     case Surface.ROTATION_180: degrees = 270; break; 
     case Surface.ROTATION_270: degrees = 180; break; 
     } 

     mCamera.setDisplayOrientation(degrees); 

     Camera.Parameters parameters = mCamera.getParameters(); 
     parameters.setPreviewSize(w, h); 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 
    } 

을하지만, 그것은 아직에 버튼을 세로 레이아웃을 설계 한 것으로 보이기 때문에, 나는 최선의 선택이 첫 번째 선택이라고 생각한다.

호프가 도움이되고 도움이되기를 바랍니다.

+0

괜찮아요. 좋아요.하지만 문제는 가로와 세로 방향 사이의 크기가 다르다는 것입니다. 조경에서는 그것의 거의 전체 화면 및 초상화에서 그것의 다만 센터에있는 전시의 세 번째를 생각한다. 내가 뭐라는지 알 겠어? –

+0

알았어. 방금 Google의 샘플 코드에서 child.layout (...)을 변경해야했습니다. 이제는 꽤 잘 작동하지만 넥서스에서 테스트 한 것을 알고 있기 때문에 다른 장치에서 테스트해야합니다. 감사합니다! –