Android相机在旋转手机时会改变尺寸

时间:2013-01-16 14:46:53

标签: 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.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。程序在水平方向上运行得很好。但是当我将手机旋转到垂直方向时,屏幕会旋转并被拉伸。我不明白为什么会这样。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

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

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

在这个项目中查看用于处理摄像头管理的Android演示:

https://sourceforge.net/p/javaocr/source/ci/5cb9b4176f40ada57296cce79addd205e4c1405c/tree/demos/camera-utils/src/main/java/net/sf/javaocr/demos/android/utils/camera/CameraManager.java#l85

您的错误是从表面尺寸设置预览尺寸 - 请勿执行此操作。相机提供有限的一组可接受的预览尺寸,可以忽略其他设置(确切的行为取决于设备)

预览尺寸表示使用的CCD分辨率,相机软件将根据需要在表面视图的大小中将其渲染到表面视图中。