Frey August 19, 2017 [编程] #Android #相机
Android自定义相机的实现
首先是要创建camera的生命周期
getCamera(); setStartPreview(Camera camera,SurfaceHolder holder); releaseCamera();
activity生命周期与camera绑定
protected void onResume() {
super.onResume();
if (mCamera == null) {
mCamera = getCamera();
if (mHolder != null) {
setStartPreview(mCamera,mHolder);
}
}
}
protected void onPause() {
super.onPause();
releaseCamera();
}
camera与surfaceview绑定
@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}
声明相机使用权限
<uses-permission android:name="android.permission.CAMERA"</uses-permission>
实现照相,通过回调将照片数据保存到文件,并将文件路径传递到其它activity(ResultAty)
private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) { File tempFile = new File("/sdacrd/temp.png");
try {
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(data);
fos.close();
Intent intent = new Intent(CustomCamera.this,ResultAty.class);
intent.putExtra("picPath",tempFile.getAbsolutePath());
startActivity(intent);
CustomCamera.this.finish();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
public void capture(View view){
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG); parameters.setPictureSize(800,400); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); mCamera.autoFocus(new Camera.AutoFocusCallback() { @Override
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
mCamera.takePicture(null,null,mPictureCallback);
}
}
});
}