0

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

4

1 回答 1

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 分辨率,相机软件会根据需要将其渲染到您的表面视图中,并按照表面视图的大小进行缩放。

于 2013-01-16T15:55:01.983 回答