我正在使用CameraView,它使用我目前正在测试的API上的SurfaceView,在片段中允许用户在我的应用中使用实时预览拍照。
然后,当拍摄照片(并保存到文件中)时,片段被隐藏,第二个片段在ImageView中显示图片,以便用户可以检查它是否被正确拍摄。
如果我按下第二个片段上的电话后退按钮,第一个片段会重新出现,但相机实时预览全部为黑色。
我认为这与必须在onPause()和onResume()上的CameraView上调用的.start()和.stop()方法有关,当片段重新出现时,这些方法不会被调用。
为了弥补这一点,我尝试添加以下内容:
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mCameraView.stop();
}
});
在切换到片段2并添加
之前,在我的BackgroundHandler中@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();