隐藏片段

时间:2017-05-23 16:07:21

标签: android android-fragments android-camera visibility camera-view

我正在使用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();

0 个答案:

没有答案