Эта проблема возникла как ошибка на определенном оборудовании см. Здесь , но ее можно устранить с помощью вызова 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 градусов против часовой стрелки, оно, похоже, не компенсирует его должным образом.
PS Обратите внимание на изменение ширины и высоты в соответствующих оборотах.