2013-01-16 90 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按需要縮放。