Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-恢复摄像头活动被延迟_Java_Android_Performance_Camera_Android Camera - Fatal编程技术网

Java Android-恢复摄像头活动被延迟

Java Android-恢复摄像头活动被延迟,java,android,performance,camera,android-camera,Java,Android,Performance,Camera,Android Camera,我正在处理相机模块,这里唯一的问题是当我尝试重新拍摄相机时,它会延迟几秒钟,然后再次打开相机预览(请参见第一张图片)。请看下面我的相机预览 这是在我拍照之后 当我单击“重拍”按钮(中间的一个)时,需要一些时间才能重新加载相机预览(第一幅图像)。我尝试过另一个应用程序,发现当它重拍照片时,它会立即(毫不延迟地)转到上一个相机预览,就像回到上一页一样 在摄影机预览中,我实现了一些画布绘制来创建覆盖视图。但我认为这不是问题所在,因为我之前提到的另一个应用程序在开始加载相机预览时也需要一些时间但是,

我正在处理相机模块,这里唯一的问题是当我尝试重新拍摄相机时,它会延迟几秒钟,然后再次打开相机预览(请参见第一张图片)。请看下面我的相机预览

这是在我拍照之后

当我单击“重拍”按钮(中间的一个)时,需要一些时间才能重新加载相机预览(第一幅图像)。我尝试过另一个应用程序,发现当它重拍照片时,它会立即(毫不延迟地)转到上一个相机预览,就像回到上一页一样

在摄影机预览中,我实现了一些画布绘制来创建覆盖视图。但我认为这不是问题所在,因为我之前提到的另一个应用程序在开始加载相机预览时也需要一些时间但是,唯一不同的是当他们重新拍摄照片时,相机预览将立即加载,而我的应用程序需要一些时间来重新加载相机预览

我在类中实现了
SurfaceHolder.Callback
。我试着删除onResume并调整了一些方法,但没有多大帮助

你知道怎么处理这个延误吗


谢谢

您需要创建另一个活动来显示拍摄照片的预览。预览活动XML布局看起来与捕获活动相同。两种XML布局之间的唯一区别是用于预览活动的ImageView

现在,如何做到这一点?这是一个简单的解决方案。正如您提到的,您使用了SurfaceHolder.Callback,因此您必须使用方法Camera.PictureCallback,将照片保存到存储目录中

Camera.PictureCallback mPicture = new Camera.PictureCallback()
{
    @Override
    public void onPictureTaken(byte[] data, Camera camera)
    {
      // Logic to Save your Photo to your storage directory.
      Intent intent = new Intent(YouActivity.this, PreviewActivity.class);
      // Pass the saved image path to preview activity.
      intent.putExtra("ImagePath", youSavedImagePath);
      startActivity(intent);
    }
};
现在,在PreviewActivity上,只需从Intent获取值

String imagePath = getIntent().getStringExtra("ImagePath");
获取图像路径后,将图像设置为imageView

Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
yourImageView.setImageBitmap(bitmap);

现在,当您按回到CaptureActivity或单击retake时,预览将立即显示,不需要花费时间。请确保您没有完成CaptureActivity。

要使重拍工作更快,您可以在照片到达时立即在引擎盖下重新启动相机预览,并在顶部显示(捕获的)图像视图,隐藏实时摄像机视频流。如果用户决定重新拍摄照片,只需隐藏覆盖(可以是片段,也可以是带有ImageView和按钮的布局),实时预览将立即可用

请看我的答案,希望这能给你一些提示。谢谢@AndyDeveloper,我会检查一下的。汉克斯先生,我会更新结果,并在结果出来后标记为已回答success@Webster是的。欢迎先生:)不管怎样,我已经用你的方法实现了类似的方法,当我打开PictureTaken时,我将转到第二个活动来加载已拍摄的图像。你能详细说明哪一部分会使重拍功能更快吗?谢谢,我恐怕这不能解决问题。延迟是由于重新启动相机造成的,活动分离只会使情况变得更糟。无论如何,如果我使用活动打开图像(我使用毕加索将图像加载到ImageView中),而不是使用片段,有什么区别吗?只要你将两个“场景”都保留在一个活动中,跟踪相机的生命周期要容易得多。通常,我们使用SurfaceView回调来协调Camera.open()、Camera.release()、startView()等。用辅助活动来处理这一问题并非不可能,但通常分离的好处远远小于有机摄影机持久性的好处。