0

我在一个片段中使用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();
4

0 回答 0