【问题标题】:CameraView black on when being used for second time第二次使用CameraView黑屏
【发布时间】:2017-05-15 05:25:08
【问题描述】:

我使用CameraView library 显示取景器并从中拍摄快照。 我有两个按钮,一个用于打开视图,另一个用于关闭视图。

两个按钮点击都会调用下面的方法,参数为真假:

public void showCameraLayout(boolean show) {
    cameraLoading.setVisibility(View.GONE);
    cameraClick.setVisibility(View.VISIBLE);
    ivGallery.setVisibility(View.VISIBLE);
    if (show) {
        showKeyboard(false);
        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED) {
            if (mCameraView != null) {
                mCameraView.addCallback(mCallback);
            }
            ViewGroup.LayoutParams params = cameraLayout.getLayoutParams();
            params.height = messagesView.getWidth() / 2;
            cameraLayout.setLayoutParams(params);
            mCameraView.start();
            safeToTakePicture = true;
        } else if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
                Manifest.permission.CAMERA)) {
            ConfirmationDialogFragment
                    .newInstance(R.string.camera_permission_confirmation,
                            new String[]{Manifest.permission.CAMERA},
                            REQUEST_CAMERA_PERMISSION,
                            R.string.camera_permission_not_granted)
                    .show(getActivity().getSupportFragmentManager(), FRAGMENT_DIALOG);
        } else {
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA},
                    REQUEST_CAMERA_PERMISSION);
        }

    } else {
        ViewGroup.LayoutParams params = cameraLayout.getLayoutParams();
        params.height = 0;
        cameraLayout.setLayoutParams(params);
        if (mCameraView != null) mCameraView.stop();
    }
}

问题是当第一次打开cameraLayout时,我可以看到实时摄像头。但是当我关闭它并再次打开它时,它显示黑屏。 奇怪的是,如果在显示黑屏时拍摄快照,我会得到正确的图像。

【问题讨论】:

  • 使用第一次释放相机后,如:mCamera.release(),下次开始之前。
  • @Kaushal28 这不是 Camera API,而是通过 CameraView 库使用的 Camera2 API。

标签: android android-layout android-camera camera2 camera-view


【解决方案1】:

捕获图像后,您应该停止预览并重新开始。

mCamera.stopPreview();
mCamera.startPreview();

试试吧!

【讨论】:

  • 我还没有捕捉图像。只是关闭并显示cameraview。此外,我认为如果我使用的是 Camera API,这可能会奏效。这是从 CameraView 库间接使用的 Camera2。
【解决方案2】:

尝试将其放入 onStop() 函数中

if(mCameraView.isOpened()) {
   mCameraView.stop();
   mCameraView.destroy();
}

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2017-05-25
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多