我正在尝试编写一个以专用间隔(例如延时摄影)拍摄照片的工具,但在第一次拍摄后很难让相机重置,以便它可以开始拍摄下一张照片。
以下是所使用的代码示例:
// gets called with the oncreate method and loads a preview fine
public void startUpPreview(){
mCamera = getCameraInstance();
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
// gets called from a later loop
public void getPicture() {
mCamera.takePicture(null, null, mPicture);
releaseCamera();
startUpPreview();
}
使用上面的代码,它会抛出错误:
java.lang.RuntimeException:release()后调用的方法
我使用直接从 SDK 指南获取的发布代码,否则可以正常工作:
private void releaseCamera(){
if (mCamera != null){
mCamera.release();
mCamera = null;
}
}
对于单张图片,通过 sleep 线程添加延迟使其起作用:
try {
Thread.sleep(1000);
releaseCamera();
startUpPreview();
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
但是当尝试拍摄多张照片时,此代码无法在循环内工作。我假设循环在所有照片拍摄 catch 之前就完成了。
预先感谢任何人可以提供的任何帮助。
最佳答案
takePicture()
启动捕获过程,并以(异步)调用 onPictureTaken()
回调结束。在结束之前你不应该释放相机。
因此,执行循环的伪代码如下所示:
onCLick() { // <-- start the loop
count = 0;
takePicture()
}
onPictureTaken() {
savePicture(count);
count++;
if (count < maxCount) {
mCamera.startPreview();
mHandler.postDelayed(runTakePicture(), 1000);
}
else {
releaseCamera();
}
}
runTakePicture() {
return new Runnable() {
public void run() {
mCamera.takePicture();
}
}
}
关于java - 如何在 Android 应用程序内有效地重新启动拍照后的预览?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214362/