我在一个片段中使用CameraView,它在我当前正在测试的 API 上使用 SurfaceView ,以允许用户在我的应用程序中使用实时预览拍摄照片。
然后,当照片被拍摄(并保存到文件中)时,片段被隐藏,第二个片段在 ImageView 中显示图片,以便用户可以检查是否正确拍摄。
如果我在第二个片段上按下手机的后退按钮,第一个片段会重新出现,但相机实时预览全黑。
我认为这与必须在 onPause() 和 onResume() 上的 CameraView 上调用的 .start() 和 .stop() 方法有关,当片段重新出现时不会调用这些方法。
为了弥补它,我尝试添加以下内容:
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mCameraView.stop();
}
});
在我的 BackgroundHandler 切换到片段 2 之前,并添加
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
mCameraView.start();
}
}
在我的第一个片段中,以便 CameraView 在重新出现时重新开始......但这不起作用。
我添加了断点来检查行是否正在运行。mCameraView.stop() 在正确的时间运行,但 mCameraView.start() 似乎在第二个片段仍然可见时运行。在片段实际可见之前调用 onHiddenChanged 的问题是否会导致错误?
如果是这种情况,我是否可以覆盖在片段再次可见后运行的任何其他功能?
如果这不是问题,您是否还有其他想法可能导致黑色预览?
谢谢
这是我从第一个片段切换到第二个片段的代码(没有相反的代码,因为我只是按下后退按钮):
FragmentTransaction ft = getFragmentManager().beginTransaction();
photo_fragment2 pf2 = new photo_fragment2();
ft.addToBackStack("photo2");
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mCameraView.stop();
}
});
ft.hide(photo_fragment1.this);
ft.add(android.R.id.content, pf2);
ft.commit();