0

在实现 SurfaceHolder.Callback 时,一些在线教程建议(实际上,我发现这是谷歌在 API 演示中写的)

    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        Parameters params = camera.getParameters();
        params.setPreviewSize(width, height);
        camera.setParameters(params);
        camera.startPreview();
    }

然而,这并不实用。与在真实设备上一样,这样的代码可能会在 上引发异常camera.setParameter(params),因为设备可能不支持指定的高度和宽度。

在阅读了一些关于 stackoverflow 的问答后,我明白了为什么这是不对的。那些帖子说我应该找到最适合屏幕的。然后我决定打印一张我的手机(HTC Magic,android 2.1)支持的尺寸表,使用params.getSupportedPreviewSizes();. 得到这些,无论手机的方向如何。

 h:720  , w:1280 
 h:480  , w:800  
 h:480  , w:720  
 h:480  , w:640  
 h:432  , w:576  
 h:320  , w:480  
 h:240  , w:400  
 h:288  , w:384  
 h:288  , w:352  
 h:240  , w:320  
 h:272  , w:272  
 h:240  , w:240  
 h:160  , w:240  
 h:144  , w:176  

毕竟,我对如何找到最适合屏幕的尺寸一无所知。我现在对正确的程序是什么感到非常困惑。我认为这个程序应该很常见,我不必自己想出一个。

任何人都可以帮助我并在这里发布一个写得很好的public void surfaceChanged示例吗?

谢谢!

4

1 回答 1

0

我所知道的是,作为参数传递给回调的宽度和高度是在运行时计算的 SurfaceHolder。所以你不太可能得到例外。

于 2011-01-22T19:08:27.147 回答