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
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
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
2 loại thiết bị: http://stackoverflow.com/a/35431231/192373 –