Here you can find the source of getOptimalPreviewSize(List
public static Size getOptimalPreviewSize(List<Size> sizes, int w, int h)
//package com.java2s; import java.util.List; import android.hardware.Camera.Size; import android.util.Log; public class Main { public static Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { final double ASPECT_TOLERANCE = 0.1; double targetRatio = (double) w / h; if (sizes == null) return null; Size optimalSize = null;//w w w . java2 s .c o m double minDiff = Double.MAX_VALUE; int targetHeight = h; // Try to find an size match aspect ratio and size for (Size size : sizes) { double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } // Cannot find the one match the aspect ratio, ignore the requirement if (optimalSize == null) { minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } Log.i("MyUtils", "optimal param w*h = " + w + "," + h + ", " + "-> optimal w*h " + optimalSize.width + "," + optimalSize.height); return optimalSize; } }