Android自定义camera
最近公司需要自定义camera,然后就查询了一些资料,仅供大家参考。
1.创建
这里自定义camera是基于SurfaceView写的,实现SurfaceHolder.Callback接口,
在surfaceCreated 中去打开相机,默认是打开前摄像头,在Android手机适配上这容易出现问题,还没找打解决方案
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open(CameraInfo.CAMERA_FACING_BACK);
}
2.预览
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
doStartPreview(mSurfaceHolder);
}
具体的实现方法
public void doStartPreview(SurfaceHolder holder) {
if (isPreviewing) {
mCamera.stopPreview();
return;
}
if (mCamera != null) {
List<Camera.Size> mSupportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
Camera.Size mPreviewSize = CameraSize.getOptimalSize(
mSupportedPreviewSizes,
displayMetrics.widthPixels,
displayMetrics.heightPixels
);
Camera.Parameters mParams = mCamera.getParameters();
mParams.setPictureFormat(PixelFormat.JPEG);
mParams.setPictureSize(mPreviewSize.width, mPreviewSize.height); // 设置图片尺寸为手机接近匹配尺寸
mParams.setPreviewSize(mPreviewSize.width, mPreviewSize.height); // 设置预览尺寸为手机接近匹配尺寸
mCamera.setDisplayOrientation(90);
List<String> focusModes = mParams.getSupportedFocusModes();
if (focusModes.contains("continuous-video")) {
mParams.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
mCamera.setParameters(mParams);
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
isPreviewing = true;
}
}
主意设置预览和图片的尺寸,不然在预览和返回图片是会出现图片被拉伸的情况
设置的尺寸取的是接近手机尺寸
mParams.setPictureSize(mPreviewSize.width, mPreviewSize.height); // 设置图片尺寸为手机接近匹配尺寸
mParams.setPreviewSize(mPreviewSize.width, mPreviewSize.height); // 设置预览尺寸为手机接近匹配尺寸
3.view销毁
在这要 执行这个方法,不然会报错
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
doStopCamera();
}
public void doStopCamera() {
if (null != mCamera) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
isPreviewing = false;
mCamera.release();
mCamera = null;
}
}
有参考网上的几篇文章,可是忘了收藏,在此谢过
项目源码https://github.com/AlanPanYun/CustomCamera1