在实现 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
示例吗?
谢谢!