2012-05-18 51 views
13

Tôi đang sử dụng máy ảnh để chỉ hiển thị bản xem trước (không chụp ảnh hoặc quay video).Android: Hướng xem trước máy ảnh ở chế độ dọc

Ứng dụng luôn ở chế độ dọc (chế độ nằm ngang bị tắt). Các preview camera luôn xoay 90 độ CCW và tôi không thể thay đổi nó (không phải với setDisplayOrientation cũng không phải với p.set("orientation", "portrait")p.set("rotation", 90)).

là bản xem trước LUÔN xoay như thế này hoặc là nó thiết bị phụ thuộc? Nếu đó là luôn luôn như Điều này ở chế độ chân dung, tôi chỉ có thể xoay hình ảnh sau đó

Hoặc có cách nào để thiết lập máy ảnh chính xác? Tôi đã đọc rất nhiều chủ đề về điều này nhưng không có câu trả lời làm việc cho tôi (Galaxy s2, Android v2.3)

+0

FYI Samsung YP-G70 (Galaxy player 5.0) luôn ở chế độ ngang. – cliff2310

+1

http://stackoverflow.com/questions/8475532/android-camera-in-view-with-buttons-and-text-over Hy vọng điều này sẽ giúp bạn .. –

Trả lời

31

Để buộc hướng dọc:

thiết android:screenOrientation="portrait" trong AndroidManifest.xml của bạn và gọi camera.setDisplayOrientation(90); trước khi gọi camera.startPreview();

tôi đã không kiểm tra trên GS2 nhưng nó hoạt động trên tất cả các điện thoại tôi đã thử nghiệm trên.

Lưu ý: setDisplayOrientation đã được bổ sung trong API Level 8

+0

Điều này hoạt động trên trình mô phỏng nhưng không bật GS2 của tôi. Nhưng nếu tôi hiểu chính xác, máy ảnh LUÔN LUÔN phải xoay 90 ° CW ở chế độ dọc là đúng không? Bởi vì sau đó tôi sẽ tự xoay nó. Đây sẽ là một cách tốt hơn anyway bởi vì nó sẽ làm việc trên cấp API thấp hơn 8. – DominicM

+1

** Điều này không hoạt động trên Samsung Ace **, ở đây tôi đăng vấn đề http://stackoverflow.com/questions/19176038/camera- setdisplayorientation-function-is-not-working-cho-samsung-galaxy-ace-wi – swiftBoy

+0

Nó không phải được quay 90 độ LUÔN. Xem câu trả lời ở đây: http://stackoverflow.com/questions/4697631/android-screen-orientation – Sonhja

5

Tôi đã được mã hóa ứng dụng cho chỉ Portrait Mode.

camera.setDisplayOrientation(90); 

sẽ làm cho máy ảnh để xoay đến 90 độ và Điều này có thể dẫn đến không định hướng phù hợp đối với một số thiết bị trong android Để có được Preview đúng cho tất cả các thiết bị Android sử dụng đoạn mã sau đó được tham khảo nhiều trong trang web dành cho nhà phát triển.

Dưới đây bạn phải gửi hoạt động của bạn, cameraId = lại là 0 và cho Máy ảnh trước là 1

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; 
    //int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
     // do something for phones running an SDK before lollipop 
     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); 
} 

Đây là cách để thiết lập setDisplayOrientation cho máy ảnh mà sẽ hoàn hảo cho tất cả các thiết bị Android.

Các vấn đề liên quan