http://blog.csdn.net/yanzi1225627/article/details/7926994前文已经实现了自动聚焦,但末尾遗留了一个小问题。经我研究发现,是我程序里面的自动聚焦所放的位置有问题。原来只在按下预览按钮,会执行initCamera,但当连续两次按预览后,程序就会没有入口了。也就是第二次if(myCamera!=null && !isView)是不满足的,第一次按预览之后,myCamera对象已经对创建,且isView=true,因此我增加了一个if判断这种情况。当myCamera创建后,且正在预览,如果这个时候再次按下预览,就会再次自动聚焦。源码如下:
public void initCamera()
{
if(myCamera == null && !isView)
{
myCamera = Camera.open();
Log.i(TAG, "camera.open");
}
if(myCamera != null && !isView) {
try {
myParameters = myCamera.getParameters();
myParameters.setPictureFormat(PixelFormat.JPEG);
myParameters.setPreviewSize(1280, 720);
//myParameters.setFocusMode("auto");
myParameters.setPictureSize(2048, 1152); //1280, 720
myParameters.set("rotation", 90);
myCamera.setDisplayOrientation(90);
myCamera.setParameters(myParameters);
myCamera.setPreviewDisplay(mySurfaceHolder);
myCamera.startPreview();
isView = true;
myCamera.autoFocus(mAutoFocusCallback);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Toast.makeText(TestPhotoActivity.this, "初始化相机错误",
Toast.LENGTH_SHORT).show();
}
}
if(myCamera != null && isView)
myCamera.autoFocus(mAutoFocusCallback);
}