我正在使用相机模块,这里唯一的问题是当我尝试重新拍摄相机时,它会再次延迟几秒钟,然后再次打开相机预览(参见第一张图片)。请看下面的我的相机预览
这是我拍完照片后
单击重拍按钮(中间一个)时,重新加载相机预览(第一张图像)需要一些时间。我尝试了另一个应用程序,发现当它重新拍摄照片时,会立即进入之前的相机预览(没有延迟),就像回到上一页一样。
在Camera Preview中,我实现了一些画布绘制来创建叠加视图。但我认为这不是问题所在,因为我之前说过的其他应用也需要一些时间来加载相机预览。 但是,唯一不同的是当他们重新拍摄照片时,相机预览会立即加载,而我的应用需要一些时间来重新加载相机预览。
我在班级中实施了SurfaceHolder.Callback
。我试图删除onResume并调整一些方法,但它没有多大帮助。
知道如何处理这种延迟吗?
由于
答案 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和按钮的布局),实时预览将立即可用!