2012-11-21 32 views
11

Tôi đã tạo ứng dụng máy ảnh và tôi muốn ứng dụng của mình được bật trong tất cả 4 hướng có thể và cập nhật bản xem trước máy ảnh cho phù hợp. cho rằng tôi đã sử dụng các phương pháp sau đây tôi đã sao chép từ: Android - Camera preview is sidewaysAndroid: Định hướng màn hình/Xoay để xem trước máy ảnh

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(); 
     } 
    } 
} 

Tôi đã tweeked các giá trị, thử nghiệm chúng trên galaxy tab2 samsung để cuối cùng có được định hướng đúng đắn và nó tất cả các công trình. Khi tôi đã thử nó trên điện thoại htc một s nó không hoạt động ở tất cả !!!!! Tất cả các định hướng e đều hoàn toàn sai! Vì vậy, tôi đã đi đến kết luận rằng thre phải là 2 loại thiết bị (hoặc nhiều hơn ... xin vui lòng không!) Vì xoay đại diện cho bao nhiêu độ màn hình đã được xoay từ vị trí "mặc định" của nó sau đó một số thiết bị có một vị trí mặc định và những người khác. Làm thế nào tôi có thể tìm hiểu về vòng xoay mặc định này và hành động tương ứng trong mã của tôi? ej: defaultOrientation = một số mã if (defaultOrientation == 0) ... khác ....

khóa định hướng màn hình là ra các câu hỏi. mục tiêu api> = 11 thanks a lot

EDIT: tôi đã sửa đổi mã của tôi để:

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(); 
     } 
    } 

hoạt động tốt hơn trên HTC One s và galaxy tab samsung miễn là chúng ta không xoay điện thoại ở chế độ dọc theo chiều dọc

+1

Tôi nghĩ rằng để thực hiện đúng, bạn cần phải tính toán chiều cao/chiều rộng của thiết bị ... Sử dụng kết hợp góc và chiều cao/chiều rộng thiết bị hiện tại. Bạn có thể tìm ra vị trí chính xác xem – dreamcoder

+0

Sử dụng ExifInterface để có định hướng ..it đang làm việc tốt cho tôi nhưng tôi chưa thử nghiệm mã của mình trên bất kỳ thiết bị HTC nào. – Biplab

+0

2 loại thiết bị: http://stackoverflow.com/a/35431231/192373 –

Trả lời

0

các yếu tố bạn cần nghĩ đến là: hướng của thiết bị, mức độ giữa màn hình và máy ảnh, giả sử bạn đang sử dụng máy ảnh sau và liệu bạn có bật hoạt động đó hay không cảm nhận sự thay đổi định hướng.

Và một điều quan trọng là liệu mã Camera HAL được nhà sản xuất triển khai có tuân thủ giao thức của Google hay không.

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