我正在开发一个使用相机的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。程序在水平方向上运行得很好。但是当我将手机旋转到垂直方向时,屏幕会旋转并被拉伸。我不明白为什么会这样。请帮我解决这个问题。
答案 0 :(得分:1)
相机根本不会改变方向 - CCD被焊接到主板上,并像处于横向模式一样提供像素(最有可能)但是,操作系统可以在方向更改时重新启动您的活动,除非您在清单中禁用它。
(并在重新启动时重新创建表面视图)
在这个项目中查看用于处理摄像头管理的Android演示:
您的错误是从表面尺寸设置预览尺寸 - 请勿执行此操作。相机提供有限的一组可接受的预览尺寸,可以忽略其他设置(确切的行为取决于设备)
预览尺寸表示使用的CCD分辨率,相机软件将根据需要在表面视图的大小中将其渲染到表面视图中。