2013-01-16 61 views
0

我正在开发使用相机的Android应用程序。我遇到了surfaceChanged()方法的问题。这是我的代码。Android相机在旋转手机时更改尺寸

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

我通过在清单文件中修复** landscape **的活动方向来解决此问题。 :) – Malaka

回答

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分辨率,相机软件将在您的表面视图中渲染它的表面视图尺寸doung按需要缩放。