我創建了一個相機應用程序,我希望我的應用程序能夠在所有4種可能的方向上轉動,並相應地更新相機預覽。對,我是用下面的方法我都抄自: Android - Camera preview is sidewaysAndroid:相機預覽的屏幕方向/旋轉
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();
}
}
}
我已經tweeked值,測試他們對三星Galaxy TAB2終於得到正確的方向和它所有的作品。當我在HTC的手機上試用它時,它根本不起作用!!!!!所有的e方向都是錯的!所以我得出的結論是,必須是兩種類型的設備(或更多...請不要!),因爲旋轉表示屏幕從「默認」位置旋轉了多少度,然後一些設備具有一個默認位置和其他人。我怎麼能找出這個默認輪換,並在我的代碼中相應地執行? EJ: defaultOrientation =一些代碼 如果(defaultOrientation == 0)... 否則....
鎖定屏幕方向是毫無疑問的。 目標API> = 11個 非常感謝
編輯: 我已經修改我的代碼:
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();
}
}
更好地工作在HTC一個S和三星Galaxy Tab,只要我們不旋轉手機在縱向模式下顛倒
我認爲爲了正確實施,您還需要計算設備高度/寬度......使用角度和設備當前高度/寬度的組合,您將能夠計算出確切的視圖位置 – dreamcoder
使用ExifInterface獲取方向..it對我來說工作正常,但我沒有在任何HTC設備上測試過我的代碼。 – Biplab
2種設備類型:http://stackoverflow.com/a/35431231/192373 –