這個問題似乎開始了與某些硬件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