有没有办法在相机装入时收听? CWAC相机

时间:2014-08-07 18:45:13

标签: android camera commonsware-cwac

我已经安装了CWAC Camera片段,一切正常。我想做一些自定义。

  1. 我想显示一个ProgressBar,因为相机片段正在加载到它的主机Activity / Fragment
  2. 用户拍完照片后,我想在照片拍摄按钮上再次显示ProgressBar,这样他们就知道他们不能立即拍照直到照相机再次准备就绪
  3. 从查看CWAC Camera的文档,我还没有发现任何支持这种回调的内容。这种事情甚至可以听吗?如果是这样,图书馆是否有一种简单的方法可以做到我没有看到的?

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

要在加载相机并开始预览时收到通知,请使用以下代码:

public class MyCameraFragment extends CameraFragment {

    CameraView cameraView;

    Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
        @Override
        public void onPreviewFrame(byte[] data, Camera camera) {
            // camera is "loaded" and first preview is sent to the screen
            // do whatever you want to do
        }
    };

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        cameraView = // code to find your CameraView
    }

    @Override
    public void onResume() {
        super.onResume();
        Camera camera = cameraView.getCamera();
        if (null != camera) {
            camera.setOneShotPreviewCallback(previewCallback);
        }
    }

    private void somehowRestartedCameraViewForWhateverReason() {
        if (null != cameraView) {
            cameraView.onResume(); // force it to restart
            Camera camera = cameraView.getCamera();
            if (null != camera) {
                camera.setOneShotPreviewCallback(previewCallback);
            }
        }
    }
}

我使用此代码更新用户界面,因此只有支持相机时才会出现闪光按钮:

camera.getParameters().getSupportedFlashModes()

返回非空列表和大小> 0.通常前置摄像头没有闪光但是谁知道?

如果您想切换相机,请在此处查看我的其他答案: CWAC Camera - Multiple camera views in one layout (and switching between them)

答案 1 :(得分:0)

  

我希望在摄像机加载到Activity / Fragment中时显示ProgressBar

我不知道"加载到Activity / Fragment"装置

  

用户拍完照片后,我想在拍照按钮上再次显示ProgressBar,这样他们就知道他们不能立即拍照直到相机再次准备就绪

您知道何时致电takePicture()。您可以通过创建自己的saveImage()实现或CameraHost的子类来了解CameraHostSimpleCameraHost的调用时间。您可以在这些时间进行ProgressBar工作。您可以在the demo app中看到此内容,我在其中禁用并重新启用操作栏项目以用于相同目的。