这个问题似乎开始了与某些硬件see here一个错误,但可以通过使用(度)的API 8.可调用mCamera.setDisplayOrientation克服所以我这是怎么实现它:
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (isPreviewRunning) {
mCamera.stopPreview();
}
Parameters parameters = mCamera.getParameters();
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0) {
parameters.setPreviewSize(height, width);
mCamera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90) {
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180) {
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270) {
parameters.setPreviewSize(width, height);
mCamera.setDisplayOrientation(180);
}
mCamera.setParameters(parameters);
previewCamera();
}
And the previewCamera method :
public void previewCamera() {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
isPreviewRunning = true;
} catch(Exception e) {
Log.d(APP_CLASS, "Cannot start preview", e);
}
}
这是在HTC Desire上,我最初必须在每个旋转检查中放入日志语句,以说明旋转是什么,然后在设备上调试并在旋转设备时观看logCat输出。对于HTC Desire来说,0是你所期望的(肖像)手机,90度是把手机转向90度逆时针(我假设它会是顺时针方向)。在代码中,你会发现当手机处于90度或180度时,我不需要做任何显示旋转 - 该设备似乎自己处理这个问题。只有一个点不能正常工作:270度旋转是当您顺时针旋转设备90度并且显示器旋转计数器正常时,但是如果您将设备逆时针旋转270度,它似乎无法正确补偿。
P.S.请注意在适当的旋转中宽度和高度的交换。
看一看 - http://stackoverflow.com/questions/10259299/force-a-camera - 永远打开肖像模式在Android/10259572#10259572 – 2012-04-22 06:31:17