拍照button按下时
   
mCamera.autoFocus(mAutoFocusCallBack);   自动对焦回调函数mAutoFocusCallBack
   
private AutoFocusCallback mAutoFocusCallBack = new AutoFocusCallback() {
	@Override
	public void onAutoFocus(boolean success, Camera camera) {
		if (success) {
			mInProgress = true;
			// set parameters of camera
			Camera.Parameters Parameters = mCamera.getParameters();
			Parameters.setPreviewSize(IMG_PREVIEW_WIDTH, IMG_PREVIEW_HEIGHT);
			Parameters.setPictureSize(IMG_WIDTH, IMG_HEIGHT);
			mCamera.setParameters(Parameters);
			mCamera.takePicture(mShutterListener, null, mImageCaptureCallback);
		}
	}
};
   设置Camera.Parameters好像有些问题,如果设置了相机(或者是SDK)不支持的分辨率就会报错,估计要添加判断。
   
   目前的设置为
   
private static int IMG_PREVIEW_WIDTH = 480;
private static int IMG_PREVIEW_HEIGHT = 320;
private static int IMG_WIDTH = 1280;
private static int IMG_HEIGHT = 960;
   监听事件mShutterListener
   
private Camera.ShutterCallback mShutterListener = new Camera.ShutterCallback() {
	public void onShutter() {
	}
};
   拍照回调函数mImageCaptureCallback
   
   这里使用了线程,因为考虑到保存图片时一般都会显示一个progress dialog,如果不用线程的话,dialog画面会定在那里,无法起到预期的效果。
   
   当然不用线程也不会有错,适当修改一下就可以了。
   
private PictureCallback mImageCaptureCallback = new PictureCallback() {
	@Override
	public void onPictureTaken(final byte[] data, Camera camera) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				// get path to save image file
				String filePath = "/sdcard/DCIM/Camera";
				// generate file name
				String name = "mytest.jpg";
				String fileName = filePath + name;
				FileOutputStream fos = null;
				try {
					// saving file
					fos = new FileOutputStream(fileName);
					fos.write(data);
					fos.close();
				} catch (Exception e) {
					// close file if error
					if (fos != null) {
						try {
							fos.close();
						} catch (IOException e1) {
							e1.printStackTrace();
						}
						try {
							throw e;
						} catch (Exception e1) {
							e1.printStackTrace();
						}
					}
					// close scene
					finish();
				}
			}
		}).start();
	}
};
   最后提醒一下,别忘记在AndroidManifest.xml里增加
   
<uses-permission android:name="android.permission.CAMERA" />
好了,就写那么多吧,希望对大家有用。
 
版权声明:本文为DaiLM原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
