Android自定义摄像头在第一次拍摄后没有响应
最近,我制作了一个用于测试目的的定制相机应用程序,我遇到了一个看似简单但对我来说很难解决的小问题。 问题是,当我点击按钮拍摄快照时,相机在第一次尝试时成功捕获了照片,但是,当我第二次点击按钮时,相机根本没有响应,没有崩溃,但无法拍摄照片 我已经在下面设置了示例代码,我想知道我实现的一些代码是否有一些结构错误,或者我只是一个做一些离题的事情的noobAndroid自定义摄像头在第一次拍摄后没有响应,android,camera,Android,Camera,最近,我制作了一个用于测试目的的定制相机应用程序,我遇到了一个看似简单但对我来说很难解决的小问题。 问题是,当我点击按钮拍摄快照时,相机在第一次尝试时成功捕获了照片,但是,当我第二次点击按钮时,相机根本没有响应,没有崩溃,但无法拍摄照片 我已经在下面设置了示例代码,我想知道我实现的一些代码是否有一些结构错误,或者我只是一个做一些离题的事情的noob preview = new Preview(this, (SurfaceView) findViewById
preview = new Preview(this,
(SurfaceView) findViewById(R.id.CameraFragment));
FrameLayout frame = (FrameLayout) findViewById(R.id.preview);
frame.addView(preview);
preview.setKeepScreenOn(true);
fotoButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
//take the picture
takeFocusedPicture();
} catch (Exception e) {
}
// exitButton.setClickable(false);
fotoButton.setClickable(false);
// progressLayout.setVisibility(View.VISIBLE);
}
});
}
@Override
protected void onResume() {
super.onResume();
// TODO Auto-generated method stub
if (camera == null) {
camera = Camera.open();
camera.startPreview();
camera.setErrorCallback(new ErrorCallback() {
public void onError(int error, Camera mcamera) {
camera.release();
camera = Camera.open();
Log.d("Camera died", "error camera");
}
});
}
if (camera != null) {
if (Build.VERSION.SDK_INT >= 14)
setCameraDisplayOrientation(context,
CameraInfo.CAMERA_FACING_BACK, camera);
preview.setCamera(camera);
}
}
//This method allows you to take the image after the camera autofocuses
Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
try {
// camera.takePicture(mShutterCallback, null, jpegCallback);
shutter(); // Method one shutt(1)
} catch (Exception e) {
}
}
};
//This method will activate the shutter class
public void shutter() {
//passies the auto focus listener parameter = 2
this.camera.autoFocus(this.mAutofocusListener);
}
private Camera.AutoFocusCallback mAutofocusListener = new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
// camera.autoFocus(null); Takes the picture after the device succeeds in auto focus
//passes in two methos as a parameter
//First parameter = 3 Second paramter = 4
camera.takePicture(mShutterListener, null, mPictureListener);
}
};
private Camera.ShutterCallback mShutterListener = new Camera.ShutterCallback() {
@Override
public void onShutter() {
}
};
//method for the picture callback parameter = 4
private Camera.PictureCallback mPictureListener = new Camera.PictureCallback() {
//I think you better alter this part
@Override
public void onPictureTaken(byte[] data, Camera camera) {
//returns the image data as a byte
//if image data exists
// if (data != null) {
camera.startPreview();
//passes in the byte data into the makeRotateImage function to rotate the image that has been taken
makeRotateImage(mOwner, data, 512 * 512); //maximum pixel willl be 262144
//}
}
};
public void takeFocusedPicture() {
//sets up the mAutoFocusCallback method as a parameter
camera.autoFocus(mAutoFocusCallback);
}
拍摄完照片后,刷新您的surfaceview并停止预览并释放相机,然后再次重新启动该过程
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try {
camera.stopPreview();
} catch (Exception e) {
// ignore: tried to stop a non-existent preview
}
camera.setPreviewDisplay("Our SurfaceView Holder");
camera.startPreview();
}
我正在尝试您的示例,但问题是我必须在setPreviewDisplay中设置什么?如果您看到上面的代码,我将使用自定义类预览来扩展ViewGroup实现SurFaceHolder.Callback。在这种情况下,我必须做什么?