與所有的Camera.Parameters一樣,在已經(jīng)打開Camera對象并設(shè)置它的預(yù)覽顯示Surface之后,就可以在surfaceCreated中獲取和設(shè)置它們。
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
Camera.Parameters parameters = camera.getParameters();
我們將采用以下兩個變量來記錄小于但最接近上述常量的值。
int bestWidth = 0;
int bestHeight = 0;
然后,就可以獲得設(shè)備所支持的所有大小的列表。這將返回一個Camera.Size對象的列表,可以對其進行循環(huán)遍歷。
List<Camera.Size> previewSizes = parameters.
getSupportedPreviewSizes();
if (previewSizes.size() > 1)
{
Iterator<Camera.Size> cei = previewSizes.iterator();
while (cei.hasNext())
{
Camera.Size aSize = cei.next();
如果該列表中的當(dāng)前大小大于保存的最佳大小,并且小于或等于LARGEST_WIDTH和LARGEST_HEIGHT常量,那么將在bestWidth和bestHeight變量中保存這個高度和寬度并繼續(xù)檢查。
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;
}
}