2013-06-23 16 views

回答

0

我用這個

private Camera.Size getBestPreviewSize(int width, int height) 
{ 
    Camera.Size result=null; 
    Camera.Parameters p = camera.getParameters(); 
    for (Camera.Size size : p.getSupportedPreviewSizes()) { 
     if (size.width<=width && size.height<=height) { 
      if (result==null) { 
       result=size; 
      } else { 
       int resultArea=result.width*result.height; 
       int newArea=size.width*size.height; 

       if (newArea>resultArea) { 
        result=size; 
       } 
      } 
     } 
    } 
    return result; 

} 
2

The AOSP Camera uses a PreviewFrameLayout作爲預覽的SurfaceView的包裝。他們根據他們從Camera中選擇的預覽尺寸的縱橫比,在PreviewFrameLayout上調用setAspectRatio()PreviewFrameLayout相應地縮放SurfaceView

由於PreviewFrameLayout是開源的,因此沒有什麼能夠阻止您將其克隆到您自己的項目中,就像我在this one中那樣。

所以,你的情況,你會設置PreviewFrameLayout是所需的最大尺寸(「當前屏幕尺寸的一半」,這我希望,您使用的是LinearLayoutandroid:layout_weight完成),教它的長寬比,把SurfaceView放在PreviewFrameLayout,你應該很好走。

請注意,您應該能夠在SurfaceView上設置android:layout_gravity,使其居中在PreviewFrameLayout之內。

+0

不可能解決的問題我做這由'FrameLayout'設置爲屏幕的50%的寬度,然後設置'FrameLayout'高度更簡單的方式和相機預覽會自動填充它 –

+0

@WillJamieson:如果您認爲這比使用所有這些代碼更簡單,那麼歡迎您這樣做。請記住,高寬比是由選定的預覽幀尺寸驅動的 - 如果您的「SurfaceView」未採用相同的高寬比進行尺寸調整,圖像將被拉伸。 – CommonsWare

+0

我檢查了你的代碼,這正是我要找的。但是,我無法在縱向模式下順利工作。你有什麼想法我可以如何工作? –

相關問題