这个问题似乎是从某些硬件的缺陷开始的。看这里但是,可以通过调用API 8中可用的mCamera.setDisplayOriation(DIED)来克服这一问题。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的愿望,我必须首先在每次轮转检查中输入日志语句,以说明旋转是什么,然后在设备上调试,并在我旋转设备时观看logcat输出。对于宏达电的愿望,0是手机,如你所期望的(肖像),90度是逆时针转动手机90度(我原以为它会顺时针方向)。在代码中,您将看到,我不需要做任何显示旋转时,手机是在90或180度-设备似乎处理这一点本身。只有一个点不能正常工作:270度旋转是当你把设备顺时针旋转90度,显示旋转计数器正常,但如果你逆时针旋转270度,它似乎没有适当地补偿它。
注意在适当的旋转中宽度和高度的偏移。