Android摄像头在旋转手机时改变尺寸

Android摄像头在旋转手机时改变尺寸,android,camera,orientation,surfaceview,Android,Camera,Orientation,Surfaceview,我正在开发一个使用摄像头的android应用程序。我对surfaceChanged()方法有问题。这是我的密码 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { Log.e(TAG, "surfaceChanged"); if (mPreviewRunning) { mCamera.stopPreview(); } Camera.Parame

我正在开发一个使用摄像头的android应用程序。我对surfaceChanged()方法有问题。这是我的密码

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    Log.e(TAG, "surfaceChanged");

    if (mPreviewRunning) {
        mCamera.stopPreview();
    }

    Camera.Parameters parameters = mCamera.getParameters();

    parameters.setPreviewSize(w, h);
    mCamera.setParameters(parameters);
    try {
        mCamera.setPreviewDisplay(holder);
    } catch (IOException e) {
        e.printStackTrace();
    }
    mCamera.startPreview();
    mPreviewRunning = true;
}

变量mPreviewRunning在开始时初始化为false。程序在水平方向上运行良好。但当我将手机旋转到垂直方向时,屏幕会旋转并拉伸。我不明白为什么会这样。请帮我解决这个问题。

摄像头根本不会改变方向-CCD焊接到主板上,并提供像素,就好像它处于横向模式(最有可能),但是,操作系统可以在方向改变时重新启动您的活动,除非您在清单中禁用它

(并在此重新启动时重新创建曲面视图)

在本项目中查看处理相机管理的android演示:

您的错误是根据曲面大小设置预览大小-不要这样做。摄像头提供有限的可接受预览尺寸集,可以自由忽略其他设置(具体行为取决于设备)


预览大小意味着使用CCD分辨率,相机软件将在您的表面视图上按表面视图的大小进行渲染,并根据需要进行缩放

我通过在清单文件中将活动的方向固定到横向解决了这个问题。:)