Android - 恢复相机活动延迟

时间:2017-07-05 04:30:29

标签: java android performance camera android-camera

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

enter image description here

这是我拍完照片后

enter image description here

单击重拍按钮(中间一个)时,重新加载相机预览(第一张图像)需要一些时间。我尝试了另一个应用程序,发现当它重新拍摄照片时,会立即进入之前的相机预览(没有延迟),就像回到上一页一样。

在Camera Preview中,我实现了一些画布绘制来创建叠加视图。但我认为这不是问题所在,因为我之前说过的其他应用也需要一些时间来加载相机预览。 但是,唯一不同的是当他们重新拍摄照片时,相机预览会立即加载,而我的应用需要一些时间来重新加载相机预览。

我在班级中实施了SurfaceHolder.Callback。我试图删除onResume并调整一些方法,但它没有多大帮助。

知道如何处理这种延迟吗?

由于

2 个答案:

答案 0 :(得分:1)

您需要创建另一个显示预览捕获照片的活动。您的预览活动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或点击重拍时,您的预览将立即显示,而不是花时间。请确保您没有完成CaptureActivity。

答案 1 :(得分:1)

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

相关问题