이 문제는 특정 하드웨어 버그로 시작 나타났다 여기에서 볼 하지만 내가 그것을 구현하는 방법입니다 그래서 mCamera.setDisplayOrientation에 대한 호출 API 8에서 사용할 수 (도)를 사용하여 극복 할 수있다 :
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도 회전하면 제대로 보정되지 않는 것처럼 보입니다.
추신 : 적절한 회전에서 너비와 높이의 교체에 유의하십시오.