与所有的Camera.Parameters一样,在已经打开Camera对象并设置它的预览显示Surface之后,就可以在surfaceCreated中获取和设置它们。
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
Camera.Parameters parameters = camera.getParameters();
我们将采用以下两个变量来记录小于但最接近上述常量的值。
int bestWidth = 0;
int bestHeight = 0;
然后,就可以获得设备所支持的所有大小的列表。这将返回一个Camera.Size对象的列表,可以对其进行循环遍历。
List<Camera.Size> previewSizes = parameters.
getSupportedPreviewSizes();
if (previewSizes.size() > 1)
{
Iterator<Camera.Size> cei = previewSizes.iterator();
while (cei.hasNext())
{
Camera.Size aSize = cei.next();
如果该列表中的当前大小大于保存的最佳大小,并且小于或等于LARGEST_WIDTH和LARGEST_HEIGHT常量,那么将在bestWidth和bestHeight变量中保存这个高度和宽度并继续检查。
Log.v("SNAPSHOT","Checking " + aSize.width + " x "
+ aSize.height);
if (aSize.width > bestWidth && aSize.width <= LARGEST_WIDTH
&& aSize.height > bestHeight
&& aSize.height <= LARGEST_HEIGHT) {
// 迄今为止,它是最大的大小,且不超过屏幕尺寸
bestWidth = aSize.width;
bestHeight = aSize.height;
}
}